C言語の基礎知識(9) データ型オーバーフロー


char a=101;
int sum=200;
a+=27;sum+=a;
printf("%d\n",sum);

参考回答:D 72. char型の範囲は-128---+127です。a+=27の場合、aの値は表現可能な範囲を超えると-128となります。

aはchar型、-128~127、a=101、a+=27以降オーバーフロー a=-128:
a=127の場合オーバーフローなし 01111111(127の補数)
a+=1の場合オーバーフロー 10000000(-128の補数)
                           

sum += a;
sumはintタイプ、a(charはintに促進されます)
                     10000000 -------> 1111111111111111111111110000000(-128 complement)
                                                         
したがって、合計= 200-128:0000000000000000000000000000001001000
                     + 11111111 11111111 11111111 10000000
 -------------------------------------- ---- ------------------------------------
                               00000000 00000000 00000000 01001000 (64+8=72) )  
...閉じる

aはchar型、-128~127、a=101、a+=27以降オーバーフロー a=-128:
a=127の場合オーバーフローなし 01111111(127の補数)
a+=1の場合オーバーフロー 10000000(-128の補数)
                           

sum += a;
sumはintタイプ、a(charはintに促進されます)
                     10000000 -------> 1111111111111111111111110000000(-128 complement)
                                                         
したがって、合計= 200-128:0000000000000000000000000000001001000
                     + 11111111 11111111 11111111 10000000
 -------------------------------------- ---- ------------------------------------
                               00000000 00000000 00000000 01001000 (64+8=72) )  

charは1バイトを占めるので、データ範囲は-128~127です。127以降は-128からデータが蓄積され始めます。a += 27は本来128ですが、最大値は127なので、このときはa=-となります。 128 と sum += a は sum に相当します -a=200 - 128 は 72 に等しく

おすすめ

転載: blog.csdn.net/qq_51519091/article/details/133150704