Nibble

In computing, a nibble (often nybble or even nyble to simulate the spelling of byte) is a four-bit aggregation,[1] or half an octet. As a nibble contains 4 bits, there are sixteen (24) possible values, so a nibble corresponds to a single hexadecimal digit (thus, it is often referred to as a "hex digit" or "hexit").

A full byte (octet) is represented by two hexadecimal digits; therefore, it is common to display a byte of information as two nibbles. The nibble is often called a "semioctet" or a "quartet" in a networking or telecommunication context. Sometimes the set of all 256 byte values is represented as a table 16×16, which gives easily readable hexadecimal codes for each value.

Contents

History

One early recorded use of the term "nybble" was in 1977 within the consumer-banking technology group at Citibank that created a pre-ISO 8583 standard for transactional messages, between cash machines and Citibank's data centers, in which a nybble was the basic informational unit.

The term "nibble" originates from the fact that the term "byte" is a homophone of the English word "bite". A nibble is a small bite, which in this context is construed as "half a bite". The alternative spelling "nybble" parallels the spelling of "byte", as noted in editorials in Kilobaud and Byte in the early eighties.

The nibble is used to describe the amount of memory used to store a digit of a number stored in packed decimal format within an IBM mainframe. This technique is used to make computations faster and debugging easier. An 8-bit byte is split in half and each nibble is used to store one digit. The last nibble of the variable is reserved for the sign. Thus a variable which can store up to nine digits would be "packed" into 5 bytes. Ease of debugging resulted from the numbers being readable in a hex dump where two hex numbers are used to represent the value of a byte, as 16×16 = 28.

Historically, there have been cases where the term "nybble" was used for a set of bits fewer than 8, but not necessarily 4. In the Apple II microcomputer line, much of the disk drive control was implemented in software. Writing data to a disk was done by converting 256-byte pages into sets of 5-bit or, later, 6-bit nibbles; loading data from the disk required the reverse. Note that the term byte also had this ambiguity; at one time, byte meant a set of bits but not necessarily 8. Today, the terms "byte" and "nibble" generally refer to 8- and 4-bit collections, respectively, and are not often used for other sizes. The term "semi-nibble" is used to refer to a 2-bit collection, or half a nibble.

Table of nibbles

The sixteen nibbles and their equivalents in other numeral systems:

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

Extracting a nibble from a byte

In C programming language:

#define HINIBBLE(b) (((b) >> 4) & 0x0F)
#define LONIBBLE(b) ((b) & 0x0F)

where b must be variable or constant of an integer data type. (Of course, if b is more than a byte wide, only one of the bytes will be considered).

For example, HINIBBLE(0xAB)==0xA and LONIBBLE(0xAB)==0xB.

In Common Lisp:

(defun hi-nibble (b)
  (ldb (byte 4 4) b))
(defun lo-nibble (b)
  (ldb (byte 4 0) b))

See also

References

  1. ^ Hall, D. V. (1980). Microprocessors and Digital Systems. McGraw-Hill. ISBN 0-07-025571-7. 

External links