Q.
数字の
-5
等の負の数はc言語においてどう処理されるか?
解説)
-5
等の負の数はc言語においてどう処理されるか?
A.
2の補数で処理されます
2の補数で処理されます
ある数と足して0になるのは、その数のマイナスである。
と考えると分かりやすいです。
1番上位のビットが1で負の値が表現されます
0110 0100 ←100
1001 1011 ←ビット反転
1001 1100 ←1を足す
1001 1100が-100を表します
解説)
5 + ? = 0
とした時に、?に入るのは -5 である。と。
これを4bitの2進数で表すとこうなります。
0101 + ? = 0000
実際には、足し算で0には出来ないので、こうする事を考えます。
0101 + ? = 10000
都合の良い事にコンピュータの場合は、4bitと言ったら本当に4個しかデータを持てないので、一番先頭の1はこぼれて消えてしまいます。
あとは逆算すると、
0101 + 1011 = (1)0000
そして、5 (0101) から -5 (1011) を導き出す為の手順が、
ビット反転して、+1する
なのですが、これも理由はシンプルで、
ある2進数をビット反転したものと、足すと、どんなパターンでも結果は、1111 と全て1になります。
0だったところは反転して1になり、
1だったところは反転して0になるので、
0+1 or 1+0 で、全て1になります。
全部の桁が1になったら、それに+1すれば、繰り上がって、最後の1は追い出され、全部の桁が、0になります。
結果、
元の数 + (反転して+1) = 0
になります。