勉強したつもりなのに、
なぜかいつもいつも忘れたり混同したりしてしまう
「2の補数」「1の補数」について。
基数の補数、減基数の補数
基数の補数
足すと桁上がりする数のうち最小の数。
例:10進法(基数=10)の場合
3 の補数は 7
35 の補数は 65
358 の補数は 642
減基数の補数
足しても桁上がりしない数のうち最大の数。
例:10進法(基数=10)の場合
3 の減基数の補数は 6
35 の減基数の補数は 64
358 の減基数の補数は 641
補数とは 【 complement 】 - 意味/解説/説明/定義 : IT用語辞典
http://e-words.jp/w/E8A39CE695B0.html
補数の定義
b進法において、自然数aを表現するのに必要な最小の桁数をnとしたとき、
b^n - a を、b進法におけるaに対する基数の補数(bの補数)
b^n - a - 1 を、b進法におけるaに対する減基数の補数(b-1の補数)
補数 - Wikipedia
http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0
2進数における1の補数、2の補数
都合上、減基数の補数→基数の補数、と、上記10進数の補数とは逆の順番で説明する。
1の補数
「足しても桁上がりしない数のうち最大の数」は
足した後で、0になっていた桁が全て1になるような数。
これは単純にビット反転した数。
2進法で100(4)の1の補数は011(3)
1001(9)の1の補数は0110(6)
2の補数
ビット反転した数に1を足し、桁上がりさせたもの。
2進法で100(4)の2の補数は100(4)
1001(9)の2の補数は0111(7)
1の補数、2の補数を混同してしまう
どうも混同してしまうので、自分なりの覚え方を考えた。
数学的に正しいかはともかく、自分はこう覚えることにした。
1の補数
→「1」は「2」より少ない
→少ないからギリギリ桁上がりしない
→ビット反転
2の補数
→「2」は「1」に1を加算した数
→1の補数に1を加算した数
→ビット反転した数に1を加算した数
補数の利用例
ある整数aに、別の整数bの2の補数を加算した数を求め、
その桁上がりを無視すると、
ある整数aから、整数bを減算した数になる。
一般的なプロセッサでは、
ある整数の負の数の表現を、2の補数としている。
補数を使う利点は、減算が加算で実現できること。
つまり、加算器だけで構成できること。
2の補数 - Wikipedia
http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0
1週間で学ぶIT基礎の基礎 - コンピュータにおける「データ表現」の基礎(第2回):ITpro >http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20010719/2/