Hexadecimal

From Sega Retro

In mathematics, hexadecimal or simply hex is a numeral system with a radix or base of sixteen|16 usually written using the symbols 0–9 and A–F or a–f.

For example, the decimal numeral 79 whose binary representation is 01001111 can be written as 4F in hexadecimal (4 = 0100, F = 1111).

It is a useful system in computers because there is an easy mapping from four binary numeral bits to a single hex digit. A byte can be represented as two consecutive hexadecimal digits. However, this mixed representation (Arabic digits up to nine and for zero, other symbols for the six other hexadecimal digits) is ambiguous and needs prefix, suffix or subscripts to be clear.

Representing hexadecimal

Hex Bin Dec
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
A 1010 10
B 1011 11
C 1100 12
D 1101 13
E 1110 14
F 1111 15

There are many ways to denote hexadecimal numerals:

  • Ada and VHDL enclose hexadecimal numerals in based "numeric quotes", e.g. "16#5A3#". (Note: Ada accepts this notation for all bases from 2 through 16 and for both integer and real types.)
  • C and languages with a similar syntax (such as C++ and Java) prefix hexadecimal numerals with "0x", e.g. "0x5A3". The leading "0" is used so that the parser can simply recognize a number, and the "x" stands for hexadecimal (c.f. O for Octal). The "x" in "0x" can be either in upper or lower case.
  • in HTML, hexadecimal character references also use the x: ֣ should give the same as ֣ – with your browser ֣ and ֣ respectively (Hebrew accent munah).
  • Pascal and some assemblers indicate hex by an appended "h" (if the numeral starts with a letter, then also with a preceding 0), e.g., "0A3Ch", "5A3h".
  • Postscript indicates hex by a prefix "16#".
  • Common Lisp use the prefixes "#x" and "#16r".
  • Other assemblers (AT&T, Motorola), some versions of BASIC and Delphi use a prefixed "$", e.g. "$5A3". This is especially common on 6502-based systems, which usually pad one- and three-digit values with a 0 in front.
  • Some versions of BASIC prefix hexadecimal numerals with "&h", e.g. "&h5a3".
  • Notations such as X'5A3' are sometimes seen; PL/I uses such notation.
  • When talking about numeral systems other than base-10, or numerals in multiple bases, mathematicians write the base in subscript after the number, e.g. "5A316" or "5A3SIXTEEN".

There is no single agreed-upon standard, so all the above conventions are in use, sometimes even in the same paper. However, as they are quite unambiguous, little difficulty arises from this.

The most commonly used (or encountered) notations are the ones with a prefix "0x" or a subscript-base 16, for hex numbers. For example, both 0x2BAD and 2BAD16 represent the decimal number 11181 (or 1118110).

The word "hexadecimal" is strange in that hexa is derived from the Greek language|Greek έξι (hexi) for "six" and decimal is derived from the Latin for "ten". An older term was the pure Latin "sexidecimal", but that was changed because some people thought it too risqué, and it also had an alternative meaning of "base 60". However, the word "sexagesimal" (base-60) retains the prefix.

A common use of hexadecimal numerals is found in HTML and CSS. They use hexadecimal notation to specify colors on web pages; there is just the # symbol, not a separate symbol for "hexadecimal". Twenty-four-bit color is represented in the format #RRGGBB, where RR specifies the value of the Red component of the color, GG the Green component and BB the Blue component. For example, a shade of red that is 238,9,63 in decimal is coded as #EE093F. This syntax is borrowed from the X Window System. See Web colors.

In URLs, special characters can be coded hexadecimally, with a percent sign used to introduce each byte; e.g., http://en.wikipedia.org/wiki/Main%20Page

The canonical written form of numeric IPv6 addresses represents each group of 16 bits as a separate hexadecimal number, to ease reading and transcription of the 128-bit addresses.

Fractions

As with other numeral systems, the hexadecimal system can be used in forming fractions, although recurring decimals are common:

1/ 0x 1 = 0x 1 1/ 0x 5 = 0x 0.3 1/ 0x 9 = 0x 0.1C7 1/ 0x D = 0x 0.13B
1/ 0x 2 = 0x 0.8 1/ 0x 6 = 0x 0.2A 1/ 0x A = 0x 0.19 1/ 0x E = 0x 0.1249
1/ 0x 3 = 0x 0.5 1/ 0x 7 = 0x 0.249 1/ 0x B = 0x 0.1745D 1/ 0x F = 0x 0.1
1/ 0x 4 = 0x 0.4 1/ 0x 8 = 0x 0.2 1/ 0x C = 0x 0.15 1/ 0x10 = 0x 0.1

Because the radix 16 is a square (42), hexadecimal fractions have an odd period much more often than decimal ones. Recurring decimals occur when the denominator in lowest terms has a prime factor not found in the radix. In the case of hexadecimal numbers, all fractions with denominators that are not a power of two will result in a recurring decimal.

External links

See also: SCHG:Number Systems