-
1桁の2進数の足し算
2進数は0と1しかありませんから、足し算は簡単です。
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 1 0
問題は、1 + 1 の場合です。2進数1桁では結果が収まりません。したがって、2桁で結果を書きます。二桁目の1は、10進数で 6+7 = 13
となる場合と同じで、二桁目の1は次の桁への「桁上がり」になります。
-
一般2進数の足し算
2進数の足し算方法は10進数の足し算の方法と変わりません。下の桁から桁上がりを考慮して順に計算します。2進数で和が(10進で)2以上の場合は、2を引き、1を次の桁へ桁上げします。
0 0 1 0
+ 0 1 1 0
------------
1 0 0 0
この計算は、10進数では、2 + 6 = 8 に相当します。
-
2進電卓
Windowsのアクセサリの電卓で2進と16進数の計算ができます。「表示」を関数電卓にします。すると、計算する数字を16進、10進、8進、2進、に切り替えることができます。大きな数の2進計算には便利です。
-
正の整数の乗算、除算
乗算のA + B は、A、B が正の整数であれば A を B回 加えれば計算できます。しかし、この方法では計算が遅いので、次のように組み立て算で計算します。10進数の場合と同じですね。
00101
00011
----------
00101
00101
00000
00000
----------
00001111
上位の桁は下位の桁の2倍になりますから1桁ずらしながら、足していくことになります。乗数(B)が負の場合、A,B の符号を共に補数をとれば、乗数を正の数にできます。除算の場合も同様です。
-
演習問題
次の計算をしてください
01101 + 00101 =
01001 + 01111 =
00101 * 01010 =
検算 結果を10進数で検算して確認しましょう。1/4くらいの人が試験で計算ミスしています。
-
C言語の整数計算
C言語では整数を int 型 で表し、演算を +,-,*,/ で表現します。int 型変数は32bitマシンでは 32bit(4バイト)で、64bitマシンでは64bitです。変数のバイト数は
seizeof() 関数で知ることができます。
int i,j;
i = 2;j = 3 + i * 5;printf("%d:\n",sizeof(j),j);
結果
4:13
-
シフト演算と2倍
2進数の右のシフトとは、2進数の各桁を右に移動し1桁目を0にすることです。たとえば、0011は1ビット左シフトすると、0110 になります。C言語では 左シフト演算を 変数 << 桁数 であらわします。
例 j を2ビット左シフトし、その値を表示します。
int j=13;int k = j<<2 ;printf("%d:%d\n",j,k);
結果
13:52