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 に等しく
、