新人の頃、毎日唱えて暗記しました。「読み」を声に出すと、意外と記憶に残りやすいようです。
なぜこんなのを覚えるかというと、ワーキングメモリが貧弱なので、技術書を読む時など、めんどくさい計算はなるべくショートカットして、思考の負担を少しでも減らしたいからです。
| 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ビットでは0と1の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 |