数字の大きさ

日常生活で考える数字とソフトウェアで考える数字で、気をつけないといけないことは、数字の大きさです。日常生活で数字を考えるとき、それはすべて可変長で考えられています。1なら1、1桁の数字です。100なら3桁、高い買い物をするときは100万円=1,000,000で7桁になります。

一方、ソフトウェアでは常に固定長になります。1を扱いたい場合でも、まずはどんな桁数の箱を用意するか決めなければいけません。C言語ではintという整数型があり、今時のシステムだと32bit長になっていると思いますので、1を扱う場合は2進数で 00000000000000000000000000000001 となります。

int i;
short s;
char c;

こんな風に変数を宣言すると、一般的には、iは32bit, sは16bit, cは8bitになります。どんな大きさの数字を代入しても変数自体の大きさは変わりません

これは非常に重要な考え方です。どんな値を代入しても変数の大きさは変わらないのです。このことを忘れてしまうとこんなバグが発生します。

if(c > 1000){ // do something; }

cが8bitしかない場合、扱える数値は0から255の間になります。符号付き整数として扱った場合には-128から127になります。ソフトウェアでは常に変数の大きさ、扱っている数字の範囲を意識しないと思わぬバグを生むことになります。使用する開発環境によって変数の大きさが変わってしまう場合もあるので、組み込みシステム開発ではint/short/charは使用せずに、int8_t/int16_t/int32_tなどの定義を使用するのが一般的です。

コメント