0x seguido de una serie de dígitos significa un número hexadecimal en C y muchos otros idiomas (otros formatos comunes son decimal, octal y binario).
El número de dígitos después de x representa el número de bits, en múltiplos de 4:
0x0 - 4 bits (or one "nibble")
0x00 - 8 bits (or one byte)
0x0000 - 16 bits
0x000000 - 24 bits
0x00000000 - 32 bits
Pero como señala Nick Johnson, independientemente del número de dígitos en la constante, en C una constante numérica se trata como un int, a menos que tenga un sufijo l o L, o esté precedida por una conversión. En máquinas de 8 y 16 bits, un int suele ser de 16 bits, y en máquinas de 32 bits es de 32 bits.
Debido a que el número es hexadecimal, cada dígito puede representar uno de los 16 valores, 0-9 y AF (A = 10, B = 11, C = 12, D = 13, E = 14 y F = 15).
Cada posición de dígito, de derecha a izquierda, representa un "nibble" hexadecimal o cuatro bits, con un valor de marcador de posición de 1, 16, 256, 4096, 65536, etc.
Entonces, 0x0ABC, por ejemplo, sería igual a 2748:
4096 256 16 1
0 A B C => 0*4096 + 10*256 * 11*16 + 12*1 = 2748
El 0 después de la x se podría omitir y terminarías con lo mismo.
El mayor valor sin firmar en cada uno de los campos de arriba es:
0xf - 15 (2⁴-1)
0xff - 255 (2⁸-1)
0xffff - 65535 (2¹⁶-1)
0xffffff - 1677215 (2²⁴-1)
0xffffffff - 4294967295 (2³²-1)