暗記しておくと楽になる2の累乗数


新人の頃、毎日唱えて暗記しました。「読み」を声に出すと、意外と記憶に残りやすいようです。

なぜこんなのを覚えるかというと、ワーキングメモリが貧弱なので、技術書を読む時など、めんどくさい計算はなるべくショートカットして、思考の負担を少しでも減らしたいからです。

2^n 10進数 読み 覚え方
2^6 64 ロクヨン 6が共通
2^8 256 ニゴロ みんな大好き
2^10 1,024 センニジュウヨン 10が共通
2^12 4,096 ヨンマルキュウロク ページサイズ(4K)
2^16 65,536 ロクゴゴサンロク 16ビットレジスタの
64Kオフセットの壁
2^20 1,048,576 104万8,576 8086のA20ゲート
2^22 4,194,304 419万4,304 特になし
2^24 16,777,216 1,677万7,216 System/360のアドレス長
2^30 1,073,741,824 10億7,374万1,824 1GiB
2^31 2,147,483,648 21億4,748万3,648 2GiB
2^32 4,294,967,296 42億9,496万7,296 4GiB
2^64 18,446,744,073,709,551,616 イヤシシ・ムナシシ・オナミナ・オクゴゴ・イロイロ 16EiB

2^nの形式で表現される整数は、「nビットで表現可能な整数の種類数」でもあります。1ビットでは01の2パターンが表現可能なので、nビットにおいては2^nパターンが表現可能、という寸法ですね。

2^n-1の形式で表現される整数は、「nビットがすべて1」という内部表現になります。このことから、nビットの符号つき整数の最大値は、2^(n-1)-1の形式をもちます(最上位ビットが符号ビットとなるため(n-1)乗となる)。

この知識を利用すると、32ビットのsigned intの最大値は?と聞かれても、「(えーと0111...だから2^31-1で)2,147,483,647」と即答できるようになります。

また、「ビットがすべて1」の内部表現について、符号あり整数(負数は2の補数で表現)として解釈した場合、-1となります。

2^n-1 2進数 符号あり整数
2^8-1 1111_1111 -1
2^16-1 1111_1111_1111_1111 -1
2^32-1 1111_1111_1111_1111_
1111_1111_1111_1111
-1

記憶容量の単位です。

2^n 10進数
1KiB 2^10 1,024
4KiB 2^12 4,096
1MiB 2^20 1,048,576
1GiB 2^30 1,073,741,824
4GiB 2^32 4,294,967,296
16EiB 2^64 18,446,744,073,709,551,616

左ビットシフトです。nビット左シフトは、2^n倍と等価です。

2<<n 10進数で何倍か
2<<3 x 8
2<<4 x 16
2<<8 x 256