次のC言語のプログラムを実行して得られる出力を、@〜Dの中から選べ。ただし、char型の変数値の内部表現は、8ビットの2の補数表現とする。
# include <stdio.h>
int main (void)
{
char i, x;
x = 0
for (i = 1; i <= 20; i++) x += i;
printf("%d\n", x);
return 0;
}
@ -82 A -46 B 46 C 82 D 210
A
20回のループでは
1回目:x = 0 + 1
2回目:x = 1 + 2
3回目:x = 3 + 3
4回目:x = 6 + 4
・・・
つまり x = 1 + 2 + 3 + 4 + ・・・ + 20
を計算するプログラムである。
1 + 2 + 3 + 4 + ・・・ + 20
= 20 × (20+1) ÷ 2
= 210
= (11010010)2
「char型の変数値の内部表現は、8ビットの2の補数表現とする」と問題文に記載されているため、
(11010010)2が2の補数で表現されていることになる。
従って、ビットを反転させて、1を加えると、
(00101101)2 + 1 = (00101110)2 = 46
つまり、 (11010010)2 は -46 である。
目次 | W−2 |