Integration of Computers    
   
Table of contents
(Prev) nginxNIC M�xico (Next)

Nibble

An octet table ordered by nibbles.

In computing, a nibble (often nybble or even nyble to match the vowels 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.[citation needed] 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 NABBLE 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 1980s.[citation needed]

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=0oct0000
1hex=1dec=1oct0001
2hex=2dec=2oct0010
3hex=3dec=3oct0011
           
4hex=4dec=4oct0100
5hex=5dec=5oct0101
6hex=6dec=6oct0110
7hex=7dec=7oct0111
           
8hex=8dec=10oct1000
9hex=9dec=11oct1001
Ahex=10dec=12oct1010
Bhex=11dec=13oct1011
           
Chex=12dec=14oct1100
Dhex=13dec=15oct1101
Ehex=14dec=16oct1110
Fhex=15dec=17oct1111
           

Low and high nibbles

The terms "low nibble" and "high nibble" are used to denote the nibbles containing, respectively, the less significant bits and the more significant bits within a byte. In graphical representations of bits within a byte, the leftmost bit is typically the most significant bit MSB), corresponding to ordinary decimal notation in which the digit at the left of a number is the most significant. In such illustrations the four bits on the left end of the byte form the high nibble, and the remaining four bits form the low nibble.[2]

Examples

(Binary to Hexadecimal)

0100 0010 = 42
0010 0000 1001 = 209
0001 0100 1001 = 149
0011 1001 0110 = 396
0001 0000 0001 = 101
0011 0101 0100 = 354
0001 0110 0100 = 164

Extracting a nibble from a byte

In C programming language:

#define HI_NIBBLE(b) (((b) >> 4) & 0x0F)#define LO_NIBBLE(b) ((b) & 0x0F)

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

For example, HI_NIBBLE(0xAB)==0xA and LO_NIBBLE(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.
  2. ^ http://www.freesoft.org/CIE/Topics/19 .htm

External links

(Prev) nginxNIC M�xico (Next)