1bit左シフトすると元の数の2倍になる。2bit左シフトすると2*2で4倍、3bitなら2*2*2つまり2^3で8倍、4bitなら2^4で16倍……nbit左シフトすると2^n倍になる。
つまり、
LOCAL = POWER(2, N)
と、
LOCAL = 1 << N
は同じ計算結果になる。
「で?」とか「だから?」と言われると答えに困るが、たとえば「1を16bitシフトすると16bitの最大値+1になる」というのは覚えておいて損はないと思う。いや、まあ、16bitの最大値を意識しなければいけないコードなんて、そんなに出てこないとは思うけれども……。
ちなみに16bitの最大値は符号なし整数で65535、符号付き整数の場合はその半分なのだが、16bitの最大値を2で割る必要はなく、1bit毎に2倍になるので、単に15bitの最大値を求めればいい、ということで32768から1引いた32767である。
ある数が16bit符号付整数の範囲内かどうか調べたければ、こういうコードを書けばいい。
IF N < 1 << 15 : : :
もっとも、この桁数なら、
IF N < 0x8000 : : :
と書けば充分なのだが。
……「ビットシフトの方が関数を呼び出すより高速」とか言おうと思ったが、体感で違いが分かるほどの差が出るとは思えないので、分かりやすいコードを書いたらいいんじゃないかと思った。
コメントをかく