補数と負数
注意:補数の説明を訂正しました。
megumさんから間違っていますとのメールをいただき、読みなおしたところ、大きな間違いをしていました。そこで下記のように訂正しています。他にも間違い、説明不足などたくさんあると思いますが、その際は太チョまで連絡をお願いします。速やかに訂正します。
また、日付が古いほど勉強したてのころのものなので、間違って覚えているところがあると思われます。ご注意下さい。
◆補数
○10進数 「100」の10の補数は
100 ⇔ 900(10の補数という)
○10進数 「100」の9の補数は
899
9 □□□ この「899」が「100」の9の補数といいます。
8 □□□ 9の補数「899」と「100」を足すと
7 □□□ 899+100=999
6 □□□ その桁で表すことができる数の最大値となる
5 □□□
4 □□□ 次ぎに、9の補数「899」に1を足すと
3 □□□ 899+1=900
2 □□□ と10の補数と同じになります
1 ■□□
100
10進数 「100」の10の補数 「900」 は 9の補数 「899」に1を足したものと同
じになる
逆に10進数「100」の 9の補数「899」に1を足した「900」が10の補数である
○補数はパソコン上では負数を足し算で表すのに使われている。
10進数「500」 から 10進数「100」 を引くとき
普通は
500−100=400
となります。
補数を利用すると
10進数 「100」 の 10の補数は「900」
500+900=1400 (PC上では桁上がりした1は無視される)
○2進数 01010101の補数は
まず1の補数をもとめる
01010101 → 反転させる 10101010 (1の補数)
つぎに1の補数に1を足す
10101010+00000001=10101011
2進数「10101010」の補数は「10101011」となる
◆負数
負数(マイナス)を表すため2の補数を使う
左端のビットを符号ビットとする
11111111
↑
1の時はマイナス、0のときはプラスか0を表す
○10進数 -10を2進数で表すには
10(10)を2進数に変換
→00001010 (A)
1の補数をもとめる
→11110101
2の補数をもとめる
→11110101(1の補数)に1を足す
→11110110 (B)
「11110110」(2)が-10(10)となる
検算
(A)と(B)を足すと
00001010
+ 11110110
---------
1 00000000 ← 00000000(2)になる
↑
桁上がり
もちろん10進数-10と10を足すと0ですね。
補数の説明は難しいですね。多くの問題を解いて覚えていくしかないかもしれません。
◆ビットで表現できる数値の範囲
2進数の場合
「0〜(2^(n-1))-1」と「-1〜-(2^(n-1))」
となる
(例)
2進数の3ビットの場合
上の公式にあてはめると
整数:(2^(3-1))-1=(2^2)-1=3
負数:-(2^(3-1))=-(2^2)=-4
よって
3、2、1、0、-1、-2、-3、-4
★★★宿題:二種向け★(2000/1/26)
10進数−5.625を,8ビット固定小数点形式による2進数で表したものはどれ
か。ここで,小数点位置は,4ビット目と5ビット目の間とし,負数は2の補数
表現を用いる。
8 7 6 5 4 3 2 1
┌─┬─┬─┬─┬─┬─┬─┬─┐
│ │ │ │ │ │ │ │ │
└─┴─┴─┴─┴─┴─┴─┴─┘
↑
小数点位置
ア 01001100
イ 10100101
ウ 10100110
エ 11010011
■解答■
二種午前平成11年秋問4
> 5.625を2進数で表すと
> 0101.1010
> 2の補数だから、足すとちょうど
> 10000.0000になるもの、つまり
> 反転したものに0.0001を足した
> ものになる、と考えて解きました。
どうもありがとうございました。
>マイナスだと最初のビットが1であると考えてアは違う。
>残り、イ、ウ、エで考えて小数点が4ビット目と5ビット目の間とすると
>イ、ウも整数部が5にはならないので違う。
>残りのエが正解。
>という風に考えました。
どうもありがとうございました
(補足)
0101.1010の1の補数は
1010.0101となる
次に2の補数は
1010.0110となる
これが-5.625(10)になるというわけです。
この問題は補数、負数、小数点の複合問題です。
★★★解説:二種向け★(2000/5/10)
2 進数 10110101 の 8 けたの 2 の補数はどれか。
ア 01001010
イ 01001011
ウ 10110100
エ 10110110
■解答■(宿題メールより)
二種午前平成12年春問5
イ 01001011
> 2の補数は10110101を反転させて1と加えます。
> 01001010 + 1 = 01001011
どうもありがとうございました。もう一度,反転させて1を加えると?
アレっていう感じですよ。コインでいうと裏表の関係でした。
> 1 0 1 1 0 1 0 1 を1の補数(反転)させると
>
0 1 0 0 1 0 1 0になります。
> 2の補数はそれに+1をするので
>
0 1 0 0 1 0 1 1 になります。
どうもありがとうございました。
> 8けたの2進数の2の補数は2^8-10110101。
> 2進数に変換すると、2^8=100000000。
> よって、100000000-10110101=01001011
どうもありがとうございました。
2の補数の作り方は,反転させて+1ですので,10110101
の2の補数は,
最初の数字は,0 最後の数字が 1
で,答えは,イしかないですね。
>コンピュータ内部で負の数を「2の補数」で表現するのは、減算を
>加算で行えるからである。
>(コンピュータ・エージ社「2種共通テキスト1
ハードウェア」
> p.40より)
どうもありがとうございました。
反転させて+1数を,再度,反転させて1を加えると?
アレっていう感じですよ。コインでいうと裏表の関係でした。だから,減算が
加算になるのでしょう。
★★★宿題:二種(基本情報技術者)向け★(2000/8/23)
2 進数の表現で,2
の補数を使用する理由はどれか。
ア 減算を加算処理で行うことができる。
イ 最下位ビットで,正数と負数が判断できる。
ウ 除算を減算の組合せで処理できる。
エ ビットの反転によって,負数を求めることができる。
(解答)
10進数の10−10を考えて見ましょう。
PCは2進数表現しかできないから上記計算は2進数に変換して行います。
10進数 2進数
10 → 0101
ー10 → 1011 求め方はいちばん上の説明を読んでください。
10-10→0101+1011=10000=0 となります
↑
この1ははみ出し、無視される。
つまり、2の補数を利用することにより減算を加算で行うことができます。
■解答■
一種午前平成12年問4
> 負数の表し方〜
>http://axion.ee.uec.ac.jp/~cvs/ic2/note/complement.html
どうもありがとうございました。
>
減算を加算と同じ回路で行うためでしょうか。
> そして、1の補数では +0 と -0
ができてしまうので。
>
> http://hts.iprs.sfc.keio.ac.jp/%7Ehts/data/jtext/b3-4.html
> 「 (1)入力機能 数の2元符号化
」の説明を参考にしました。
>
> http://pegasus.cs.shinshu-u.ac.jp/%7Eyizawa/logic/chap9/chap9.html
> 組合せ回路について参考にしました。
どうもありがとうございました。