0xNNNN
(not necessarily four digits) represents, in C at least, a hexadecimal (base-16 because 'hex' is 6 and 'dec' is 10 in Latin-derived languages) number, where N
is one of the digits 0
through 9
or A
through F
(or their lower case equivalents, either representing 10 through 15), and there may be 1 or more of those digits in the number. The other way of representing it is NNNN16.
It's very useful in the computer world as a single hex digit represents four bits (binary digits). That's because four bits, each with two possible values, gives you a total of 2 x 2 x 2 x 2
or 16
(24) values. In other words:
_____________________________________bits____________________________________
/
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| bF | bE | bD | bC | bB | bA | b9 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
\_________________/ \_________________/ \_________________/ \_________________/
Hex digit Hex digit Hex digit Hex digit
A base-X number is a number where each position represents a multiple of a power of X.
In base 10, which we humans are used to, the digits used are 0
through 9
, and the number 730410 is:
- (7 x 103) = 700010 ; plus
- (3 x 102) = 30010 ; plus
- (0 x 101) = 010 ; plus
- (4 x 100) = 410 ; equals 7304.
In octal, where the digits are 0
through 7
. the number 7548 is:
- (7 x 82) = 44810 ; plus
- (5 x 81) = 4010 ; plus
- (4 x 80) = 410 ; equals 49210.
Octal numbers in C are preceded by the character 0
so 0123
is not 123 but is instead (1 * 64) + (2 * 8) + 3, or 83.
In binary, where the digits are 0
and 1
. the number 10112 is:
- (1 x 23) = 810 ; plus
- (0 x 22) = 010 ; plus
- (1 x 21) = 210 ; plus
- (1 x 20) = 110 ; equals 1110.
In hexadecimal, where the digits are 0
through 9
and A
through F
(which represent the "digits" 10
through 15
). the number 7F2416 is:
- (7 x 163) = 2867210 ; plus
- (F x 162) = 384010 ; plus
- (2 x 161) = 3210 ; plus
- (4 x 160) = 410 ; equals 3254810.
Your relatively simple number 0x10
, which is the way C represents 1016, is simply:
- (1 x 161) = 1610 ; plus
- (0 x 160) = 010 ; equals 1610.
As an aside, the different bases of numbers are used for many things.
- base 10 is used, as previously mentioned, by we humans with 10 digits on our hands.
- base 2 is used by computers due to the relative ease of representing the two binary states with electrical circuits.
- base 8 is used almost exclusively in UNIX file permissions so that each octal digit represents a 3-tuple of binary permissions (read/write/execute). It's also used in C-based languages and UNIX utilities to inject binary characters into an otherwise printable-character-only data stream.
- base 16 is a convenient way to represent four bits to a digit, especially as most architectures nowadays have a word size which is a multiple of four bits.
- base 64 is used in encoding mail so that binary files may be sent using only printable characters. Each digit represents six binary digits so you can pack three eight-bit characters into four six-bit digits (25% increased file size but guaranteed to get through the mail gateways untouched).
- as a semi-useful snippet, base 60 comes from some very old civilisation (Babylon, Sumeria, Mesopotamia or something like that) and is the source of 60 seconds/minutes in the minute/hour, 360 degrees in a circle, 60 minutes (of arc) in a degree and so on [not really related to the computer industry, but interesting nonetheless].
- as an even less-useful snippet, the ultimate question and answer in The Hitchhikers Guide To The Galaxy was "What do you get when you multiply 6 by 9?" and "42". Whilst same say this is because the Earth computer was faulty, others see it as proof that the creator has 13 fingers :-)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…