eraシリーズ改造/バリアント開発の覚え書き

ビットシフトで2のn乗


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
 :
 :
 :

と書けば充分なのだが。



……「ビットシフトの方が関数を呼び出すより高速」とか言おうと思ったが、体感で違いが分かるほどの差が出るとは思えないので、分かりやすいコードを書いたらいいんじゃないかと思った。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

リンク

漠々ト、獏
eramaker/eramaker2の開発元の公式サイト。

Emuera - emurator of eramaker
C#で書かれたeramakerのエミュレータ「Emuera」のプロジェクトページ。

eraシリーズを語るスレ まとめ
eraシリーズ全般のまとめ。バリアント情報、改造情報など。

eratoho まとめ
eramakerのバリアント「eratoho」のまとめ。

era板
eraシリーズについての掲示板。

サブページ

Rubiera
Bitbucket上のRubieraプロジェクトページ。Rubieraのソースコードのダウンロードはここで。

管理人/副管理人のみ編集できます