お蔵入り

clip!clip!
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

情報処理試験の穴です。
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進数の相互変換ができないということでしょうか?

2008-10-07 10:14:28

>>#1
usaさん、実はあたしも若い頃に情報処理試験で誤答していました。
合格はしましたが、冷や汗ものでした。
その後、符号を変えるプログラミングに直面したときにも、この不思議な数字でちょくちょくバグをだしていました。
いやはや、負の絶対値最大数は扱いにくい数字です。

#5.  usa
2008-10-07 10:38:06

>>#3 同感です。

トラックバック(2)

トラックバックURL: