• ベストアンサー

2進演算について。

以下の問題でのこの答えが合っているか自信が無いので確認と間違いがあれば指摘をお願いします。 (1)次の整数を8bitsの符号+絶対値表現、2の補数表現、127増し表現で表現しなさい。    -20    +55 (2)次の10進小数を、32ビットの浮動小数点表示しなさい。    -123.8125 答(1) -20 (+絶対値表現)→ 1001 0100 (2の補数表現) → 0001 0100 (127増し表現) → ? -20の+絶対値表現というのはそのまま20の8bit表示でいいんでしょうか? マイナスなので一番左のビットに1を立てればいいだけでしょうか? それと-20の2の補数表現は-20の2進表現を逆数にして1足すので結局20の2進数でいいのでしょうか? +55 (+絶対値表現)→ 0011 0111 (2の補数表現) → 1100 1001 (127増し表現) → ? これは+なので普通に考えてこの答えで間違いがあるでしょうか? それといずれの問題でも「127増し表現」というのはどうすればいいのでしょうか? 答(2) -123.8125の32ビット浮動小数点表示は 123.8125(10進)→ 111 1011.1101(2進) 0.11110111101×2^7 (正規化) で、32ビットの浮動小数点表示は 1 00000111 11110111101000000000000 なると思うのですが、どうでしょうか? 解答と指摘をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmb01
  • ベストアンサー率45% (63/138)
回答No.1

符号+絶対値表現 -20 -> - 0001 0100 -> 1001 0100 +55 -> + 0011 0111 2の補数表現は 負の数を表すときにその正の数のビットパターンの全ビットを反転させて1を足す、 ということなので、 +20 -> 0001 0100 反転 1110 1011 -20 -> 1110 1100 +55 -> 0011 0100 127増し表現は -20 + 127 = 107 -> 0110 1011 +55 + 127 = 182 -> 1011 0110 もしくは -20 + 127 = 1110 1100 + 0111 1111 = 0110 1011 +55 + 127 = 0011 0100 + 0111 1111 = 1011 0011 浮動小数のほうは、 正規化の際に 0111 1011.1101 -> 1.1110111101 * 2^6 として、最上位の1は省略し、仮数部は1110111101 指数部は127増し表現になるので 6 + 127 = 133 -> 1000 0101 で、 1 10000101 11101111010000000000000 となります。

usui323
質問者

お礼

回答ありがとうございました。 127増しはただ単に足せばいいんですね。 浮動小数点のほうも、非常によくわかりました。 ありがとうございました。

その他の回答 (1)

noname#7341
noname#7341
回答No.2

127増し表現は、その出題順からすると下記のように考えて欲しいということでしょう。 a = -20 : 2の補数表現の数字は a[7:0] = 8'b1110_1100 b = a+128:MSBを反転すれば+128操作 b[7:0] = {~a[7],a[6:0]} = 8'b0110_1100 c = b-1:そこから-1デクリメントしてね c[7:0] = 8'b0110_1011 a = 55 : 2の補数表現の数字は a[7:0] = 8'b0011_0100 b = a+128:MSBを反転すれば+128操作 b[7:0] = {~a[7],a[6:0]} = 8'b1011 0100 c = b-1:そこから-1デクリメントしてね c[7:0] = 8'b1011 0011 8ビットで表現される2の補数表現の-128~+127の数値を、MSB反転で0~255にマッピングでき、そこから-1デクリメントしてます。

usui323
質問者

お礼

回答ありがとうございました。

関連するQ&A