8ビットマシンは255を超える16ビットの数字をどのように表示しますか?
3779 ワード
背景
今日コードを書くには、データの送信回数を表示する必要があります.回数が増加し、最大数万回になる可能性があります.しかし、テストで数字が255になるとゼロから表示されます.明らかにデータが境界を越えている.実はこの問題はよく解決されていて、主にデータ型変換でいいです.しかし、8ビットマシンに遭遇し、デバイスが提供するインタフェース関数のうち、データのタイプが8ビット整形しかない場合は、どうすればいいですか?今日出会ったように.
解決する
デバイスは現実的なデータのインタフェース関数を提供します:
コード実装は次のとおりです.
また、デジタル分割後は強制データ変換を加えたほうがよいことに注意してください.
今日コードを書くには、データの送信回数を表示する必要があります.回数が増加し、最大数万回になる可能性があります.しかし、テストで数字が255になるとゼロから表示されます.明らかにデータが境界を越えている.実はこの問題はよく解決されていて、主にデータ型変換でいいです.しかし、8ビットマシンに遭遇し、デバイスが提供するインタフェース関数のうち、データのタイプが8ビット整形しかない場合は、どうすればいいですか?今日出会ったように.
解決する
デバイスは現実的なデータのインタフェース関数を提供します:
void _putstr(U8 *p);
その入力は8ビットの整数型しかなくて、つまり255より大きい数字は正確に表示することができなくて、これはいくつかの数字の変換をする必要があります.例えば、表示すべき数字は65535
であり、65
、53
、5
、1001
に分割して表示することができる.10
が01
に分割されて表示される場合.コード実装は次のとおりです.
void Show16data( U8 line,U8 n,U16 data )
{
char num_temp[1];
U8 dataH,dataM,dataL;
_gotoxy(n,line);
if (data >= 10000)
{
dataH =(U8)(data / 1000);
dataM = (U8)((data%1000)/10);
dataL = (U8)(data%10);
sprintf(num_temp,"%02d",dataH);
// %02d 20011 20011, 2011
_putstr(num_temp);
sprintf(num_temp,"%02d",dataM);
_putstr(num_temp);
sprintf(num_temp,"%1d",dataL); // %1d
_putstr(num_temp);
}
else if (data >= 1000)
{
dataH =(U8)(data / 100);
dataL = (U8)(data%100);
sprintf(num_temp,"%02d",dataH);
_putstr(num_temp);
sprintf(num_temp,"%02d",dataL);
_putstr(num_temp);
}
else if (data >= 100)
{
dataH =(U8)(data / 10);
dataL = (U8)(data%10);
sprintf(num_temp,"%02d",dataH);
_putstr(num_temp);
sprintf(num_temp,"%1d",dataL);
_putstr(num_temp);
}
else
{
sprintf(num_temp,"%02d",data);
_putstr(num_temp);
}
}
また、デジタル分割後は強制データ変換を加えたほうがよいことに注意してください.
dataH =(U8)(data / 100);