足し算とひき算の基本は10進数と変わりない。
桁が上がったり下がったりする時の数が異なる。
・足し算
1111
+ 101
____
10100
1+1は10なので桁上がり
1+0+1は10なのでまた桁上がり
1+1+1は11なのでまたまた桁上がり
1+1は10またまたまた桁上がり
繰り上がった1がそのまま入る
・ひき算
ひき算を考える前に、負の数は補数を使って表す。
補数は2つある
①その桁数で最大値を得る為に補う数
②次の桁に繰り上がる為に補う数
・10進数では9の補数と10の補数
10進数123という数があるとする。
3桁の最大値は999
999 -123=876←9の補数
次の桁に上がる数は1000
1000 -123=877←10の補数
・2進数では1の補数と2の補数を使う
☆4桁の2進数0011という数があるとする。
4桁の最大値は1111
1111 -0011=1100(いくつ足せばその数になるか考える)
↑これが1の補数
1100という数値を補ってやれば最大値が得られる。
次の桁に繰り上がる数は10000
10000 -0011=1101(いくつ足せばその数になるか考える)
↑これが2の補数
1101という数値を補ってやれば桁上がりする数が得られる。
負の数を表すのに2の補数を使う。
<2の補数の簡単な求め方>
10進数の3は、8ビットの2進数では00000011
①全てのビットを反転させる(0と1を入れ替える)→11111100
②それに1を加算する
10進数の-3は、2進数では、11111101 ←2の補数
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
5-3を4けた2進数で表すと、
0101-0011
-0011は、+(-0011)とも表せる。
-0011は、2の補数表現を使って、1101と表せる。
つまりコンピューターは、
このような足し算を使って2という答えを出す。
0101+1101=(10010←桁あふれしたビットは切り捨て。)0010
(5) (-3) (2)
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
☆ちなみに2の補数を使って負の数を表す場合も、
1ビット目は符号として扱うことができる。
先頭のビットが0の場合は負の数、
0は正の数を表す。
☆正の数と負の数は、互いに2の補数表現となる関係にある。
−8 | -7 | -6 | -5 | ~ | -2 | -1 | 0 |
---|---|---|---|---|---|---|---|
1000 | 1001 | 1010 | 1011 | ~ | 1110 | 1111 | 0000 |
_ | 7 | 6 | 5 | ~ | 2 | 1 | |
_ | 0111 | 0110 | 0101 | ~ | 0010 | 0001 |
☆負の数の方が表せる数が1つ多くなることに注意する。