• ベストアンサー

負数を2の歩数で表現する固定小数点表示法においてnビットで表現できる範

負数を2の歩数で表現する固定小数点表示法においてnビットで表現できる範囲 この範囲の小さい方がなぜそうなるのかよくわかりません。たとえば4ビットのとき、1111の補数は10000にならないといけないから1111の補数が表現できないということですか?

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

質問者さんの「-8の2の補数は4ビットでは表現 できない。」が正解ですが、少し補足します。 2進法なので、1桁の表現可能な値は2通りです。 nビットあれば、2のn乗ですから、必ず偶数個の 表現ができます。 例え、1ビットを符号で使うとしても、原理は同じ。 4ビットなので16通りの値が表現できますね。 で、正が8通り、負が8通りです。0も正の値なので、 正の方は0~7、負の方は-1~-8となります。 正の方が0~8だと奇数個になって辻褄が合いませんね。

ghfjri
質問者

お礼

回答ありがとうございます。 まさにドンピシャの回答ありがとうございました。

その他の回答 (2)

回答No.3

教科書どおりの表現で理解しようとすると、 2の補数の考え方はわかりくいものです。 負の数を表すのに2の補数を使う理由は、 ハードウェアがシンプルになるからです。 すなわち、ハードウェア上は正の数のみの 整数計算と 負の数の整数計算はハードウエア上は区別の 必要がないからです。(わかるかな) 通常、値が0のレジスタに1を順に加えていくと最後は すべてのビットが立ちます (この状態をCOBOLではHIGH-VALUE といいます)。 この状態で次に1を加えると0にもどります。 (マスク等の設定でオーバーフローフラグをたてたりできますが) すなわち'11111111'のつぎは'00000000'です。 このメカニズムを利用したのが 負の数を表すのに2の補数表現を用いる理由です。 すなわち'0'の前は'1111111' 0の前は-1と言うことです。 言葉としては次のように覚えておくとよいでしょう 「2の補数表現では'-1'は'11111111'(HIGH-VALUE)で表す」 あとは、先頭ビットを符号ビットに流用していると考えれば おのずと範囲も理解できるでしょう。 (教科書での2の補数の説明は無視しなさい) ちなみに、 負の数の表現に2の補数を使用していないCPUも 存在します。 (マイナーな存在、世間は広いです、データのコンバートがあったら苦労するぞ)

ghfjri
質問者

お礼

回答ありがとうございます。 熱意を感じます。とてもうれしいです。 しかし私には難しすぎた・・・。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

なぜ「1111の補数は10000にならないといけない」のですか? ふつう, 4ビットなら 1111 の 2の補数は 0001 だと思うのですが.

ghfjri
質問者

お礼

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

関連するQ&A