What Are Hexadecimal Numbers In Programming

What Are Hexadecimal Numbers?

Hexadecimal (hex) is a base-16 number system used extensively in programming. It uses 16 distinct symbols:

  • Digits: 0-9 represent values 0-9
  • Letters: A-F represent values 10-15
HexDecimalBinary
000000
110001
220010
330011
440100
550101
660110
770111
881000
991001
A101010
B111011
C121100
D131101
E141110
F151111

Why Hexadecimal?

1. Compact Representation of Binary

One hex digit = 4 binary bits (a nibble). This makes binary data much more readable:

  • Binary: 11111111 (8 bits)
  • Hex: FF (2 digits)

2. Byte Alignment

Memory addresses, color values, and machine-level data naturally align with 8-bit bytes (2 hex digits).

3. Human-Readable

Much easier to read and write than long binary strings.

Representing Hex in Code

Different programming languages use various prefixes:

# Python
hex_value = 0xFF        # 255
hex_value = 0x1A         # 26
print(hex(255))          # '0xff'
// JavaScript
let hex = 0xFF;          // 255
let hex2 = 0x1A;         // 26
let str = 0xFF.toString(16);  // 'ff'
// C, C++, Java, C#
int hex = 0xFF;          // 255
int hex2 = 0x1A;         // 26
printf("%x", 255);       // 'ff'
/* CSS - Color values */
color: #FF0000;          /* Red */
background: #00FF00;     /* Green */
border: 1px solid #0000FF; /* Blue */
<!-- HTML Entities -->
&#x3C;   <!-- < (less than) -->
&#x3E;   <!-- > (greater than) -->

Common Use Cases

1. Colors (RGB/HEX)

/* RGB: Red, Green, Blue each 0-255 (00-FF) */
#FF0000  /* Red: FF=255, 00=0, 00=0 */
#00FF00  /* Green */
#0000FF  /* Blue */
#FFFFFF  /* White */
#000000  /* Black */
#808080  /* Gray (128,128,128) */

2. Memory Addresses

int* ptr = &some_variable;
printf("Address: %p\n", ptr);  // 0x7ffeeb2c8a4c

3. Character Codes (ASCII/Unicode)

print('\x41')        # 'A' (ASCII 65)
print('\u03A9')      # 'Ω' (Omega)
print('\x1B[31m')    # ANSI escape: red text

4. Bitmasking and Flags

#define READ_FLAG   0x01  // 0000 0001
#define WRITE_FLAG  0x02  // 0000 0010
#define EXEC_FLAG   0x04  // 0000 0100
#define ALL_FLAGS   0x07  // 0000 0111
int permissions = READ_FLAG | WRITE_FLAG;  // 0x03

5. File Signatures (Magic Numbers)

# PNG file signature
png_header = b'\x89PNG\r\n\x1A\n'
# PDF file signature
pdf_header = b'%PDF'

6. Networking (MAC Addresses, IPv6)

MAC = "00:1A:2B:3C:4D:5E"
IPv6 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"

Converting Between Number Systems

Binary to Hex

Group binary into 4-bit nibbles:

Binary:  1101 1010
↓    ↓
Hex:     D    A
Result: 0xDA

Decimal to Hex

# Division by 16 method
255 ÷ 16 = 15 remainder 15 (F)
15 ÷ 16 = 0 remainder 15 (F)
Result: 0xFF

Programming Conversions

# Python examples
hex(255)           # '0xff'
int('FF', 16)      # 255
int('0xFF', 0)     # 255 (auto-detect)
# Format strings
f"{255:x}"         # 'ff'
f"{255:X}"         # 'FF'
f"{255:#x}"        # '0xff'
// JavaScript examples
parseInt("FF", 16);     // 255
(255).toString(16);     // 'ff'
Number("0xFF");         // 255

Common Hexadecimal Values

ValueHexBinaryCommon Use
00x0000000000Null, false
2550xFF11111111Max byte, white
1280x8010000000Midpoint, negative flag
32,7680x8000-16-bit negative flag
4,294,967,2950xFFFFFFFF-Max 32-bit unsigned

Bitwise Operations with Hex

# Bitwise operations are clearer in hex
a = 0xF0      # 11110000
b = 0x0F      # 00001111
print(hex(a & b))   # 0x0 (AND)
print(hex(a | b))   # 0xFF (OR)
print(hex(a ^ b))   # 0xFF (XOR)
print(hex(~a))      # -0xf1 (NOT)
print(hex(a << 1))  # 0x1E0 (left shift)

Hex Dumps

Hex dumps show raw binary data in hexadecimal format:

00000000  89 50 4E 47 0D 0A 1A 0A  00 00 00 0D 49 48 44 52  |.PNG........IHDR|
00000010  00 00 00 10 00 00 00 10  08 06 00 00 00 1F F3 FF  |................|

Each column shows:

  • Offset: Memory address/location
  • Hex bytes: Raw data in hexadecimal
  • ASCII: Human-readable representation

Best Practices

Do:

  • Use hex for bitmasks, flags, and low-level operations
  • Use hex for color values in web development
  • Use hex when working with memory addresses
  • Use uppercase for readability in documentation

Don't:

  • Use hex for regular arithmetic (use decimal)
  • Mix case inconsistently within a project
  • Use hex where the base isn't relevant to the context

Key Takeaway: Hexadecimal is the bridge between human-readable decimal and machine-readable binary. It's essential for systems programming, debugging, web colors, and any situation where you need to work with bits and bytes directly.

Leave a Reply

Your email address will not be published. Required fields are marked *


Macro Nepal Helper