Hexadecimal
Hexadecimal is a positional numeral system for representing a numeric value as base 16. For the most common convention, a digit is represented as "0" to "9" like for decimal and as a letter of the alphabet from "A" to "F" for the digits with decimal value 10 to 15.
As typical computer hardware is binary in nature and that hex is power of 2, the hex representation is often used in computing as a dense representation of binary information. A hex digit represents 4 contiguous bits known as a nibble. An 8-bit byte is two hex digits, such as.
Special notation is often used to indicate that a number is hex. In mathematics, a subscript is typically used to specify the base. For example, the decimal value would be expressed in hex as. In computer programming, various notations are used. In C and many related languages, the prefix
0x is used. For example, 0x.Written representation
Common convention
Typically, a hex representation convention allows either lower or upper case letters and treats the letter the same regardless of its case.Often when rendering non-textual data, a value stored in memory is displayed as a sequence of hex digits with spaces between values. For instance, in the following hex dump, each 8-bit byte is a 2-digit hex number, with spaces between them, while the 32-bit offset at the start is an 8-digit hex number.
00000000 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66
00000010 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61
00000020 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E
00000030 20 65 64 69 74 2C 20 69 6E 63 6C 75 64 69 6E 67
00000040 20 79 6F 75 20 28 61 6E 64 20 6D 65 29 21
Identification
There are several conventions for expressing that a number is represented as hex.- A decimal subscript can give the base explicitly. For example 15910 indicates decimal 159, 15916 indicates hex 159. Some prefer a text subscript, such as 159decimal and 159hex, or 159d and 159h
- In C and many languages influenced by it, the prefix
0xindicates that the numeric literal after it is in hex, a character of a string or character literal can be expressed as hex with the prefix\xand to output an integer as hex via printf-like function, the format conversion code%Xor%xis used - In URIs, character codes are written as hex pairs prefixed with : where is the code for the space character, ASCII code point 20 in hex, 32 in decimal.
- In XML and XHTML, a character can be expressed as a hex numeric character reference using the notation
ode;, for instanceTrepresents the character U+0054. If there is no the number is decimal. - In Intel-derived assembly languages and Modula-2, hex is denoted with a suffixed or :
FFhor05A3H. Some implementations require a leading zero when the first hex digit character is not a decimal digit, so one would write0FFhinstead ofFFh. Some other implementations allow C-style numbers - Other assembly languages, Pascal, Delphi, some versions of BASIC, GameMaker Language, Godot and Forth use
$as a prefix:$5A3,$C1F27ED - Some assembly languages use the notation
H'ABCD'; similarly, Fortran 95 uses Z'ABCD' - Ada and VHDL enclose hex numerals in based "numeric quotes":
16#5A3#,16#C1F27ED#. For bit vector constants VHDL uses the notationx"5A3",x"C1F27ED". - Verilog represents hex constants in the form
8'hFF, where 8 is the number of bits in the value and FF is the hex constant - The Icon and Smalltalk languages use the prefix
16r:16r5A3 - PostScript and the Bourne shell and its derivatives denote hex with prefix
16#:16#5A3,16#C1F27ED - Common Lisp uses the prefixes
#xand#16r. Setting the variables *read-base* and *print-base* to 16 can also be used to switch the reader and printer of a Common Lisp system to hex representation for reading and printing numbers. Thus hex numbers can be represented without the #x or #16r prefix code, when the input or output base has been changed to 16. - MSX BASIC, QuickBASIC, FreeBASIC and Visual Basic prefix hex numbers with
&H:&H5A3 - BBC BASIC and Locomotive BASIC use
&for hex - TI-89 and 92 series uses a
0hprefix:0h5A3,0hC1F27ED - ALGOL 68 uses the prefix
16rto denote hex numbers:16r5a3,16rC1F27ED. Binary, quaternary, and octal numbers can be specified similarly. - The most common format for hex on IBM mainframes and midrange computers running the traditional OS's is
X'5A3'orX'C1F27ED', and is used in Assembler, PL/I, COBOL, JCL, scripts, commands and other places. This format was common on other IBM systems as well. Occasionally quotation marks were used instead of apostrophes. - Donald Knuth used a typewriter typeface to represent hex in his book The TeXbook, like:,
Implicit
- In the Unicode standard, a character value is represented with followed by the hex value, e.g. is the inverted exclamation point.
- Color references in HTML, CSS and X Window can be expressed with six hex digits prefixed with : magenta, for example, is represented as. CSS also allows 3-hexdigit abbreviations with one hexdigit per component: abbreviates, a golden orange.
- In MIME quoted-printable encoding, character codes are written as hex pairs prefixed with : is "España"
- PostScript binary data can be expressed as unprefixed consecutive hex pairs: ...
- Any IPv6 address can be written as eight groups of four hex digits, where each group is separated by a colon. This, for example, is a valid IPv6 address: or abbreviated by removing leading zeros as .
- Globally unique identifiers are written as thirty-two hex digits, often in unequal hyphen-separated groupings, for example.
Alternative symbols
- During the 1950s, some installations, such as Bendix-14, favored using the digits 0 through 5 with an overline to denote the values as,,,, and.
- The SWAC and Bendix G-15 computers used the lowercase letters u, v, w, x, y and z for the values 10 to 15.
- The ORDVAC and ILLIAC I computers used the uppercase letters K, S, N, J, F and L for the values 10 to 15.
- The Librascope LGP-30 used the letters F, G, J, K, Q and W for the values 10 to 15.
- On the PERM computer, hex numbers were written as letters O for zero, A to N and P for 1 to 15. Many machine instructions had mnemonic hex-codes ; programs were written without instruction names.
- The Honeywell Datamatic D-1000 used the lowercase letters b, c, d, e, f, and g whereas the Elbit 100 used the uppercase letters B, C, D, E, F and G for the values 10 to 15.
- The Monrobot XI used the letters S, T, U, V, W and X for the values 10 to 15.
- The NEC parametron computer NEAC 1103 used the letters D, G, H, J, K for values 10–15.
- The Pacific Data Systems 1020 used the letters L, C, A, S, M and D for the values 10 to 15.
- New numeric symbols and names were introduced in the Bibi-binary notation by Boby Lapointe in 1968.
- Bruce Alan Martin of Brookhaven National Laboratory considered the choice of A–F "ridiculous". In a 1968 letter to the editor of the CACM, he proposed an entirely new set of symbols based on the bit locations.
- In 1972, Ronald O. Whitaker of Rowco Engineering Co. proposed a triangular font that allows "direct binary reading" to "permit both input and output from computers without respect to encoding matrices."
- Some seven-segment display decoder chips show unexpected output due to logic designed only to produce 0–9 correctly.
Sign
Bit pattern
Hex can express the bit pattern in a processor, so a sequence of hex digits may represent a signed or even a floating-point value. This way, the negative number −4210 can be written as FFFF FFD6 in a 32-bit CPU register, as C228 0000 in a 32-bit FPU register or C045 0000 0000 0000 in a 64-bit FPU register.Exponential notation
Just as decimal numbers can be represented in exponential notation, so too can hex numbers. P notation uses the letter P, whereas E serves a similar purpose in decimal E notation. The number after the P is decimal and represents the binary exponent. Increasing the exponent by 1 multiplies by 2, not 16:. Usually, the number is normalized so that the hex digits start with .Example: represents.
P notation is required by the IEEE 754-2008 binary floating-point standard and can be used for floating-point literals in the C99 edition of the C programming language.
Using the %a or %A conversion specifiers, this notation can be produced by implementations of the printf family of functions following the C99 specification and
Single Unix Specification POSIX standard.