KDOC 206: バイト数を直感的に把握する
この文書のステータス
- 作成
- 2024-07-30 貴島
- レビュー
- 2024-08-01 貴島
概要
CPUまわりの本を読んでいると、よく1バイト分確保して〜という文章が出てくる。そのたびにちょっと考えて進数変換しているので、覚えて感覚でやるようにする。
1バイト。
- (2進数) 8桁で1バイト
1000 1110
- (16進数) 2桁で1バイト
8E
- ASCIIコードでは1バイトで1文字を表す
- 「A」 →
41
, 「1」 →31
- 「A」 →
2バイト。
- (2進数)
1001 0000 1000 1110
- (16進数)
908E
3バイト。
- (2進数)
1110 0110 1000 0100 1001 1011
- (16進数)
E6849B
- UTF-8エンコードは1〜4バイトの可変長コードである。多くの日本語は3バイトで表現される
- 「あ」 →
E3 81 82
, 「愛」 →E6849B
- 「あ」 →
- RGBカラーコードは、各色1バイトの合計3バイトで表現する
`FF FF FF
(白)- カラーコード - Wikipedia
- ウェブカラー - Wikipedia
KDOC 210: 『0と1のコンピュータ世界 バイナリで遊ぼう!』では、目安となる値を示している。
16進数表記 | サイズ | 覚え方 |
0x0100 | 256バイト | char型の範囲 |
0x1000 | 4KB | 仮想メモリのページサイズ |
0x10000 | 64KB | 16ビットで64KB |
0x100000 | 1MB | フロッピーディスク1枚分 |
0x10000000 | 256MB | 4GBの4分の1のさらに4分の1 |
0xFFFFFFFF | 4GB | 整数の最大サイズ |
確認方法
確かめてみると手っ取り早い。
echo -n "愛" | hexdump -C
00000000 e6 84 9b |...| 00000003
echo -n "ABCD" | xxd
00000000: 4142 4344 ABCD
def conv(target16) puts("_____________________") target10 = target16.to_i(16) printf("16進数: #{target16}\n") printf("10進数: %s\n", target10) printf(" 8進数: %s\n", target10.to_s(8)) printf(" 2進数: %s\n", target10.to_s(2)) printf("サイズ: %s bit\n", target10 * 8) printf("サイズ: %s byte\n", target10) printf("サイズ: %s KB\n", target10 / 1024.0) printf("サイズ: %s MB\n", target10 / 1024.0 / 1024.0) printf("サイズ: %s GB\n", target10 / 1024.0 / 1024.0 / 1024.0) end conv('100') conv('1000') conv('10000') conv('100000') conv('1000000') conv('10000000') conv('FFFFFFFF')
_____________________ 16進数: 100 10進数: 256 8進数: 400 2進数: 100000000 サイズ: 2048 bit サイズ: 256 byte サイズ: 0.25 KB サイズ: 0.000244140625 MB サイズ: 2.384185791015625e-07 GB _____________________ 16進数: 1000 10進数: 4096 8進数: 10000 2進数: 1000000000000 サイズ: 32768 bit サイズ: 4096 byte サイズ: 4.0 KB サイズ: 0.00390625 MB サイズ: 3.814697265625e-06 GB _____________________ 16進数: 10000 10進数: 65536 8進数: 200000 2進数: 10000000000000000 サイズ: 524288 bit サイズ: 65536 byte サイズ: 64.0 KB サイズ: 0.0625 MB サイズ: 6.103515625e-05 GB _____________________ 16進数: 100000 10進数: 1048576 8進数: 4000000 2進数: 100000000000000000000 サイズ: 8388608 bit サイズ: 1048576 byte サイズ: 1024.0 KB サイズ: 1.0 MB サイズ: 0.0009765625 GB _____________________ 16進数: 1000000 10進数: 16777216 8進数: 100000000 2進数: 1000000000000000000000000 サイズ: 134217728 bit サイズ: 16777216 byte サイズ: 16384.0 KB サイズ: 16.0 MB サイズ: 0.015625 GB _____________________ 16進数: 10000000 10進数: 268435456 8進数: 2000000000 2進数: 10000000000000000000000000000 サイズ: 2147483648 bit サイズ: 268435456 byte サイズ: 262144.0 KB サイズ: 256.0 MB サイズ: 0.25 GB _____________________ 16進数: FFFFFFFF 10進数: 4294967295 8進数: 37777777777 2進数: 11111111111111111111111111111111 サイズ: 34359738360 bit サイズ: 4294967295 byte サイズ: 4194303.9990234375 KB サイズ: 4095.9999990463257 MB サイズ: 3.9999999990686774 GB
関連
- KDOC 126: xxdでファイルをバイナリで見る。バイナリを確認する方法が共通している