Difference between revisions of "Hexadecimal"

From Sega Retro

m (Text replace - 'Category:Hacking' to 'Category:Technical')
Line 20: Line 20:
 
* 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.)
 
* 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.
 
* 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).
+
*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 [[assembler]]s (including [[Zilog Z80]] assemblers) indicate hex by an appended "h" (if the numeral starts with a letter, then also with a preceding 0), e.g., "0A3Ch", "5A3h".
 
* Pascal and some [[assembler]]s (including [[Zilog Z80]] 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#".
 
* Postscript indicates hex by a prefix "16#".

Revision as of 11:59, 9 September 2011

In mathematics, hexadecimal or simply hex is a numeral system with a radix or base of 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 $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $A $B $C $D $E $F
Bin 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Dec 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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 (including Zilog Z80 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 uses 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