Ads By Google
16進数について教えてください
負数を2の補数で表す16ビットの符号付き固定小数点方式で絶対値が最大である数値を16進数として表すとどうして8000になるのでしょうか?
2008-10-06 21:47の質問
この質問は、30日間解決しなかったために自動的に質問が一旦閉じられました。
回答(1)
1.
2008-10-06 22:56:06
例えば8ビットで考えると下表で一目瞭然。
01111111 127
:
00000100 4
00000011 3
00000010 2
00000001 1
00000000 0
11111111 -1
11111110 -2
11111101 -3
11111100 -4
:
10000000 -128
正の最大が127というのはおわかりと思う。
では、-127というのは"10000001"ですね。
これからまだ"1"引けますので、負の最大は"10000000"ということになります。
0から127まで128種類。
-1から-128まで128種類。
合計256種類の数字が表現できる、ということです。
16ビットに拡張すれば、
0111111111111111 7FFF
:
0000000000000100 0004
0000000000000011 0003
0000000000000010 0002
0000000000000001 0001
0000000000000000 0000
1111111111111111 FFFF
1111111111111110 FFFE
1111111111111101 FFFD
1111111111111100 FFFC
:
1000000000000000 8000
情報処理試験の穴です。
01111111 127
:
00000100 4
00000011 3
00000010 2
00000001 1
00000000 0
11111111 -1
11111110 -2
11111101 -3
11111100 -4
:
10000000 -128
正の最大が127というのはおわかりと思う。
では、-127というのは"10000001"ですね。
これからまだ"1"引けますので、負の最大は"10000000"ということになります。
0から127まで128種類。
-1から-128まで128種類。
合計256種類の数字が表現できる、ということです。
16ビットに拡張すれば、
0111111111111111 7FFF
:
0000000000000100 0004
0000000000000011 0003
0000000000000010 0002
0000000000000001 0001
0000000000000000 0000
1111111111111111 FFFF
1111111111111110 FFFE
1111111111111101 FFFD
1111111111111100 FFFC
:
1000000000000000 8000
情報処理試験の穴です。
Ads By Google
コメント(4)
#1. usa
2008-10-06 23:36:26
テンゾー&テンロクさん、この回答の最初を見て自分の犯した「苦ーい経験」を思い出しました。
大学出たての頃、メーカーでコンピューターを設計し出来上がったら、割り算回路にバク発見で真っ青! 非除数を例えば128で割ったときの最大の余りが正数の場合127、負数の場合ー128になっていたのです。正にこの補数表現のトリックでした。即日、他の人が気がつかない内に直しました。
#2. BLUEPIXY
2008-10-07 02:22:31
2の補数表現で、負数を表す時、その絶対値を得るには、
「ビットを反転して+1する」のですよね?
実際にやってみてください。
符号付きの数値のなかでは最大になるはずです。
というか、
2進数⇔16進数の相互変換ができないということでしょうか?
#3. ゾーロク
2008-10-07 10:14:28
>>#1
usaさん、実はあたしも若い頃に情報処理試験で誤答していました。
合格はしましたが、冷や汗ものでした。
その後、符号を変えるプログラミングに直面したときにも、この不思議な数字でちょくちょくバグをだしていました。
いやはや、負の絶対値最大数は扱いにくい数字です。
#5. usa
2008-10-07 10:38:06





