ニブル

コンピューティングにおいて、ニブル (nibble) とはデータ量の単位の一つで、4ビットのことであり、オクテットの半分である。

バイト(byte)に合わせてnybbleやnybleと綴られることもある。一般的な1バイト（8ビット）の半分であることからハーフバイト (half-byte) とも呼ばれる。テトラード (tetrade) ともいう。コンピュータネットワークや電気通信の分野では、セミオクテット (semi-octet) 、クアッドビット (quadbit) 、カルテット (quartet)       とも呼ばれる。1ニブルは16通り(24)の値を取り得る。1ニブルは十六進法で1桁であり、ヘックスディジット(hex digit)とも呼ばれる。なお、英語のnibbleには、動詞として「少しずつ食べる」「ちょっとかじる」、また、名詞としてそのような場合の「少し」の意味がある。

1バイト（1オクテット）は十六進2桁で表されるので、すなわち1バイトの情報は2ニブルで表される。1バイトの取り得る値256個を16×16のテーブルで表示することで、各値の十六進による値が読み取りやすくなる。

4ビットのコンピュータ・アーキテクチャは基本単位として4ビットのグループを使用する。初期のマイクロプロセッサや電卓、ポケットコンピュータは4ビットのアーキテクチャであった。現在でも4ビットで動作するマイクロコントローラが使用されている。

歴史
"nibble"という言葉は、"half a byte"（半バイト）を表す用語に由来しており、その綴りは"byte"の同音異義語の"bite"によるものである。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値    は、十進値を表す。

歴史的に、nybbleが4ビット以上のグループに使用されるケースがあった。Apple IIでは、ディスクドライブ制御とはソフトウェアで実装されていた。ディスクへのデータの書き込み時には256バイトのページを5ビット（後に6ビット）のニブルのセットに変換し、ディスクからデータをロードする時には逆の手順を行っていた  。さらに、Integrated Woz Machineに関する1982年の文書では、一貫して「8ビットニブル」を使用している。バイトという用語もかつては同様の曖昧さを持ち、必ずしも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   0000        1hex  =  1dec  =  1oct   0001      2hex  =  2dec =   2oct   0010      3hex  =  3dec  =  3oct   0011                            4hex  =  4dec =   4oct   0100      5hex  =  5dec  =  5oct   0101      6hex  =  6dec =   6oct   0110  7hex  =  7dec  =  7oct   0111                         8hex  =  8dec  =  10oct   1000    9hex  =  9dec =   11oct   1001    Ahex =  10dec  =  12oct   1010   Bhex =  11dec  =   13oct   1011                       Chex =  12dec  =  14oct   1100   Dhex =  13dec =   15oct   1101   Ehex =  14dec =   16oct   1110   Fhex =  15dec  =  17oct   1111                       

上位ニブルと下位ニブル
「上位ニブル」(high nibble) と「下位ニブル」(low nibble) という言葉は、バイト内の下位ビットおよび上位ビットをそれぞれ含むニブルを表すのに使用される。バイト内のビットの図形表現では、左端のビットが最上位ビット (MSB) を表すことがある。これは、数値の左側の数字が最上位である通常の十進表記に対応している。そのような例では、バイトの左端の4ビットが上位ニブル、残りの4ビットが下位ニブルを形成する。例えば、 9710 = (0110 0001)2 においては、上位ニブルは 01102 (6)、下位ニブルは 00012 (1)である。

関連項目
 二進法
 ワード
 データ量の比較
 IEEE 1284 - ニブルモード

脚注

外部リンク
Apple Assembly Line, May 1981, Volume 1, Number 8

Category:情報の単位
Category:コンピュータの算術