Tell you what, here's a writeup on hexadecimal
) that's actually useful
Everything you always wanted to know about hex but..No, scratch that, it's far too bad a pun. M'kay, try again..
FryingLizard's Useful Guide To Hex (and Binary, along the way)
As you know, hex is used by geeks to specify numbers. It's useful because it is (a) compact to write/type, and (b) relates closely to binary
, which is what computers are all about.
How it works
Numbers that are in hex are usually indicated by either a '$' prefix (general use), a '0x' prefix (common - used in C and other programming languages), a '&' prefix (archaic, used on some 8-bit computers), or, occasionally, the letter 'H' on the end. So, you could see hex numbers written as $1234, 0x1234, &1234, or 1234H.
A hex digit can go from 0 to 15, and as the familiar decimal system runs out at '9', we have to cheat and start using letters to represent values from 10 to 15, so we use A-F.
So, the hex number $F is '15' in decimal, $9 is just plain '9' in decimal, and $10 is '16' in decimal...
Why? Well, obviously in decimal the number '10' means 'one times 10 plus zero'. Because hex goes up to 15, '$10' means 'one times 16 plus zero'. Hence, $18 is 'one times 16 plus eight', or 24.
If you follow on from this, $100 is 'one times 16 times 16, plus zero times 16, plus zero', or 16*16, which = 256.
It can be helpful to memorise (well, it just kinda sinks in after a while) the following;
$10=16, $100=256, $1000=4096 (16*16*16), $10000=65536, and so on.
So, $FFFF (in at the deep end) is actually 65535, because it's one less than $10000, or of course you could work it out the long way, as ($F=15, so 15*4096 + 15*256 + 15*16 + 15 = 65535)
Why do we bother? Are we just hopeless geeks?
Well, because, like I said earlier, hex is actually fairly closely related to binary.
In binary the only numbers are 1 and 0, and this is all computers really, deep down, understand - this is because all the little wires inside your computer can only be in two possible states - 'voltage going down the wire' or 'no voltage going down the wire', i.e. 1 or 0.
Binary numbers are usually notated by a '%' prefix, so %1 is just 1, %10 is 2 (1 times 2, plus 0), %1000 is 8 (1 times 2*2*2), and so on. Thing is, binary numbers are a pain in the arse to deal with, because they get pretty long, for example 12345678 is %101111000110000101001110, which clearly sucks fairly badly.
M'kay, so binary is too cumbersome, why is hex better?
Well, because hex - also known as base 16 (because the numbers go from 0 to 15; 16 possible values) - is based on a power of two (2*2*2*2 or 24),
and binary is powers of two, so in fact a single hex digit directly corresponds to four binary digits. (by the way, binary digits = bits)
The number 10 in decimal is $A in hex, and %1010 (1 times 2*2*2 plus 1 times 2 = 8 + 2 = 10) in binary, $F in hex = %1111, so $F0 in hex is %11110000. M'kay?
If you treat each hex digit as directly being equal to 4 bits (4 bits is called a nibble, by the way, same as 8 bits is called a byte) you can see that hex is just a nice compact way of handling the binary numbers that make the computer run.
For if a computer uses 8 physical wires together (called a bus) to represent a number, you have 8 bits, so you can represent a number from %00000000 (0) to %11111111 (255) over those 8 wires. As you can see '255' isn't exactly an intuitive number because we're using decimal, but %11111111 is $FF in hex, which fits far more nicely.
It gets far worse when the numbers get larger; %1111111100000000 is '65280' in decimal, but a nice clean $FF00 in hex.
If you want to convert %1010000010100000 into decimal it's a pain in the arse (it's 41120, by the way), but converting it to hex is relatively easy - you just break the binary number into sets of 4 bits and away you go - remember that %1010 is 'A', so you get $A0A0.
By the way, although geeks like me are fairly good at converting between hex and decimal in our heads (you just get used to it after a while), most sane people use a calculator (e.g. the Windows calculator in 'scientific' mode will do it).
Hope this helps!