ichikawa です。n進数について、2回目の授業です。
本日習った内容は、
- 負の2進数
- 2の補数の計算
- ビット演算子
です。
まずは負の2進数。
コンピュータがどのようにして負の数字を解釈しているのか、勉強しました。
4ビットの値の時、例えば2進数1100のように4ビット目が1だと、 4ビット目だけ数字がマイナスになります。1000は10進数で -8 になります。この例の値を10進数に直すと、3ビット目も1であるので、 -8 + 4 で4になります。つまり2進数の4ビットだと10進数で -8 〜 +7 まで表すことができます。
8ビットの 値の時、8ビット目が1だと、10000000は10進数で-128となります。10001010のような2進数ならば、-128 + 2 + 8で 118 であります。8ビットでは -128 〜 +127 までの 数字が表せられます。
32ビットの値の時、32ビット目が1だと、ここは 10進数で -2147483648 となります。ここまでくると筆算ではなかなか計算できないので、前回の講義のようにphpを使って計算しました。
次に2の補数の計算の仕方について
まず2進数だと、50 は 0110010 と表せられます。
これの補数を求めます。筆算になるのですが、 1 と 0 を逆転させて、 1 ビットを付け足し、1を足せば補数になります。
どういうことかと言いますと
0110010
これを逆転
1001101
1を足す
1001110
これを計算すると
-64 + 8 + 4 +2 =-50
となります。以上です。
今日はビット演算子についても習いました。
以下Aというビット値
「1101」
とBというビット値
「1000 」
があるとします。
これを例にして、ビット演算子を説明します。
●AND
これはAとBの両方に1がセットされているビットに、ビットを立てます。ほかは0です。これは以下すべての演算子に適用します。
A 1101
B 1000
結果
1000
●OR
これはAまたはB のどちらかに1がセットされているビットに、ビットを立てます。
A 1101
B1000
結果
1101
●XOR
これはAまたはBに1がセットされており、 かつ両方にはセットされていないビットにビットを立てます。
A 1101
B 1000
結果
0101
●否定
これはビットを反転します。
A 1101 → 0010
B1000 → 0111
今回習ったのは以上でした。実際どんなところで使われるかは、まだ教わっていませんが、今回は概念を学ぶことができました。

コメントをどうぞ