ニブル
情報量の単位
From Wikipedia, the free encyclopedia
コンピューティングにおいて、ニブル (nibble) とはデータ量の単位の一つで、4ビットのこと[1][2]であり、オクテットの半分である。

バイト(byte)に合わせてnybbleやnybleと綴られることもある。一般的な1バイト(8ビット)の半分であることからハーフバイト (half-byte) とも呼ばれる[3]。テトラード (tetrade) ともいう[4][5]。コンピュータネットワークや電気通信の分野では、セミオクテット (semi-octet) [6]、クアッドビット (quadbit) [7]、カルテット (quartet) [8][9]とも呼ばれる。1ニブルは16通り(24)の値を取り得る。1ニブルは十六進法で1桁であり、ヘックスディジット(hex digit)とも呼ばれる[10]。なお、英語のnibbleには、動詞として「少しずつ食べる」「ちょっとかじる」、また、名詞としてそのような場合の「少し」の意味がある。
1バイト(1オクテット)は十六進2桁で表されるので、すなわち1バイトの情報は2ニブルで表される。1バイトの取り得る値256個を16×16のテーブルで表示することで、各値の十六進による値が読み取りやすくなる。
4ビットのコンピュータ・アーキテクチャは基本単位として4ビットのグループを使用する。初期のマイクロプロセッサや電卓、ポケットコンピュータは4ビットのアーキテクチャであった。現在でも4ビットで動作するマイクロコントローラが使用されている。
歴史
"nibble"という言葉は、"half a byte"(半バイト)を表す用語に由来しており、その綴りは"byte"の同音異義語の"bite"によるものである[3]。2014年、ワシントン州立大学名誉教授のDavid B. Bensonは、1958年ごろの彼がロスアラモス国立研究所のプログラマだったときに、二進化十進表現 (BCD) の1桁を保持するのに必要な記憶単位としての"half a byte"の意味としてnibbleという言葉をふざけて使っていた(そして、おそらくはそれを造語したかもしれない)ことを思い出した。1980年代初頭の雑誌『キロボー・マイクロコンピューティング』や『バイト』の論説によれば、別の綴り"nybble"は"byte"の綴りを反映したものである。"nybble"という用語の初期に使われた形跡としては他に、1977年にシティバンクの消費者銀行テクノロジーグループ内での使用例がある。これは、現金自動預け払い機とシティバンクのデータセンターとの間のトランザクションメッセージに関して、ISO 8583が策定される以前に標準を作成したもので、基本的な情報単位として"NABBLE"を使用していた。
ニブルは、IBMのメインフレームにおいて、パック10進数で格納されている数字の桁を記憶するのに使用されるメモリ量を記述するために使用された。この手法は、計算を速くし、デバッグを容易にするために使用された。8ビットのバイトは半分に分割され、各ニブルは十進1桁を格納するために使用される。変数の最後(最も右)のニブルは符号用に予約されている。従って、変数には最大9桁まで格納でき、5バイトに「パック」される。1バイトの値を表すのに十六進2桁を使用する16進ダンプにより、数値の読み取りが可能になり、デバッグが容易になった。例えば、5つのBCD値31 41 59 26 5Cは、十進値+314159265を表す。
歴史的に、nybbleが4ビット以上のグループに使用されるケースがあった。Apple IIでは、ディスクドライブ制御とグループ符号化記録方式はソフトウェアで実装されていた。ディスクへのデータの書き込み時には256バイトのページを5ビット(後に6ビット)のニブルのセットに変換し、ディスクからデータをロードする時には逆の手順を行っていた[11][12][13]。さらに、Integrated Woz Machineに関する1982年の文書では、一貫して「8ビットニブル」を使用している[14]。バイトという用語もかつては同様の曖昧さを持ち、必ずしも8ビットを意味していたわけではなかった。そのため、バイトに対して明確に8ビットを意味する「オクテット」(octet) という用語が作られたが、同様にニブルについても明確に4ビットを意味する「カルテット」(quartet) や「クアッドビット」(quadbit) という言葉が作られた。今日では、「バイト」と「ニブル」という用語は、ほぼ常に8ビット、4ビットを意味するようになっており、他のサイズを表現するのに使用されることはめったにない。
ニブルの表
16通りの1ニブルの値
| 二進法 | 十六進法 |
|---|---|
| 0000 0100 0010 | 0 4 2 |
| 0010 1010 1001 | 2 A 9 |
| 0010 0000 1001 | 2 0 9 |
| 1110 0100 1001 | E 4 9 |
| 0011 1001 0110 | 3 9 6 |
| 0001 0000 0001 | 1 0 1 |
| 0011 0101 0100 | 3 5 4 |
| 0001 0110 0100 | 1 6 4 |
| 0hex | = | 0dec | = | 0oct | 0 | 0 | 0 | 0 | |||
| 1hex | = | 1dec | = | 1oct | 0 | 0 | 0 | 1 | |||
| 2hex | = | 2dec | = | 2oct | 0 | 0 | 1 | 0 | |||
| 3hex | = | 3dec | = | 3oct | 0 | 0 | 1 | 1 | |||
| 4hex | = | 4dec | = | 4oct | 0 | 1 | 0 | 0 | |||
| 5hex | = | 5dec | = | 5oct | 0 | 1 | 0 | 1 | |||
| 6hex | = | 6dec | = | 6oct | 0 | 1 | 1 | 0 | |||
| 7hex | = | 7dec | = | 7oct | 0 | 1 | 1 | 1 | |||
| 8hex | = | 8dec | = | 10oct | 1 | 0 | 0 | 0 | |||
| 9hex | = | 9dec | = | 11oct | 1 | 0 | 0 | 1 | |||
| Ahex | = | 10dec | = | 12oct | 1 | 0 | 1 | 0 | |||
| Bhex | = | 11dec | = | 13oct | 1 | 0 | 1 | 1 | |||
| Chex | = | 12dec | = | 14oct | 1 | 1 | 0 | 0 | |||
| Dhex | = | 13dec | = | 15oct | 1 | 1 | 0 | 1 | |||
| Ehex | = | 14dec | = | 16oct | 1 | 1 | 1 | 0 | |||
| Fhex | = | 15dec | = | 17oct | 1 | 1 | 1 | 1 | |||