2進数 |
1.2進数 |
私達が普段使っている数は、10進数です。1の位、10の位、100の位……、からなっています。これは10の0乗の位、10の1乗の位、10の2乗の位……、からなっているとも言えます。
それぞれの位には0から9までの値が書かれます。例えば、4126という数字は、
4 * 10の3乗 + 1 * 10の2乗 + 2 * 10の1乗 + 6 * 10の0乗
と表されます。
これに対してそれぞれの位が2のべき乗で表される数を2進数と言います。例えば、1011という2進数は、
1 * 2の3乗 + 0 * 2の2乗 + 1 * 2の1乗 + 1 * 2の0乗
と表されます。10進数でいうところの11です。2進数では、それぞれの位には0か1しか書けません。各々の位は「ビット」と呼ばれます。「第nビット」あるいは「nビット目」といえば、「2のn乗の位」を指します。
HSPでは、2進数の頭に%(または0b)をつけます。
2.論理積、論理和 |
if文で、条件式同士の論理積、論理和について説明しましたが、それとは別に、数字同士の論理積、論理和を計算することができます。
x & y
という計算は、xとyそれぞれを2進数で表した数に対し、各ビットごとに論理積を行なった値を求めます。この場合1が真、0が偽に対応します。つまり、
1 & 1 = 1 1 & 0 = 0 0 & 1 = 0 0 & 0 = 0
となります。
xが156、yが87であれば、2進数で書くとxは%10011100、yは%1010111です。両方とも1のビットだけが1になります。
%10011100 ← x %01010111 ← y --------- %00010100 ← x & y
これを10進数で書くと20です。よって156 & 87 = 20です。
論理和の場合は
1 | 1 = 1 1 | 0 = 1 0 | 1 = 1 0 | 0 = 0
つまり、どちらか一方でも1の箇所が1になります。
%10011100 ← x %01010111 ← y --------- %11011111 ← x | y
これを10進数で書くと223です。よって156 | 87 = 223です。
補足 |
・バイト |
コンピュータは、絵も音も文章も、すべて数字として記憶しています。しかもそれは10進数ではありません。2進数です。つまり、1と0の膨大な量の羅列です。しかしそれでは扱いにくいので、8ビットを一まとめとした「バイト」という単位で扱います。1バイトは0(= %00000000)から255(= %11111111)までです。 |