2012年7月13日金曜日

メモリの量と情報量

メモリの最小単位はビット(bit)です。
1ビットは0か1かの様に2通りの状態を表現できます。
2ビットあれば2つのビットを組み合わせて
00, 01, 10, 11の4種類の状態が表現できます。
つまり1ビット増えると情報量が2倍になります。
8ビット(1バイト)は256種類です。
32ビット(4バイト)は4294967296(約43億)の状態を表現できます。
表計算ソフトを使えばすぐにビットが持てる情報量を確認できます。
これはOpenOfficeを使った例です。



 
 良く整数型に32ビットが使われますが、普通のint型は正負の情報に1ビット使うので絶対値としてはその2分の1の値となり、さらに0から数えるのでそれも状態数の一つとしてカウントすると扱える最大数は-1になったりもします。
処理系によって型の容量は変わりますが扱える数の最大値と最小値は

#include < limits.h>
とヘッダを追加した上でINT_MAX等のマクロで得ることが出来ます。

intの最小値と最大値
printf( " %d ", INT_MIN );//-2147483648
printf( " %d ", INT_MAX );//2147483647


ビットを実感してみよう

 int a =32;
 a = a >> 1;  //16になる。

>>は、右シフトという演算子です。
これにより、変数aのビット列を右に1つずらしています。
それでどうして値が半分になるかと言うと
2進数で10進数の32を表すと
----------------------
32  16   8   4   2   1 ←ビットを1にした時に増える数
1   0    0    0   0   0  ←この行が実際のビット列(2進数)
----------------------
となるので
ビット列が右にずれると・・
----------------------
32  16   8   4   2   1 
  0   1    0   0   0  0  
----------------------
10進数で言うと16の値になる分けです。

0 件のコメント: