十六进制与二进制转换:程序员必知的进制知识
进制转换是程序员的基本功。十六进制、二进制在内存表示、颜色编码、网络协议等领域广泛使用。
常用进制
| 进制 | 基数 | 前缀 | 示例 |
|---|---|---|---|
| 二进制 | 2 | 0b | 0b1010 |
| 八进制 | 8 | 0o | 0o12 |
| 十进制 | 10 | 无 | 10 |
| 十六进制 | 16 | 0x | 0x0A |
进制转换方法
十进制 → 二进制
除 2 取余法:
10 ÷ 2 = 5 余 0
5 ÷ 2 = 2 余 1
2 ÷ 2 = 1 余 0
1 ÷ 2 = 0 余 1
→ 1010
十进制 → 十六进制
除 16 取余法:
255 ÷ 16 = 15 余 15 (F)
15 ÷ 16 = 0 余 15 (F)
→ 0xFF
二进制 → 十六进制
每 4 位二进制对应 1 位十六进制:
1010 1100 → AC
编程语言中的进制表示
JavaScript
// 不同进制的数字
0b1010 // 二进制 = 10
0o12 // 八进制 = 10
0x0A // 十六进制 = 10
// 转换为不同进制字符串
(255).toString(2) // "11111111"
(255).toString(8) // "377"
(255).toString(16) // "ff"
// 从不同进制字符串解析
parseInt("ff", 16) // 255
parseInt("1010", 2) // 10
Java
// 不同进制的数字
int bin = 0b1010; // 二进制
int oct = 012; // 八进制
int hex = 0x0A; // 十六进制
// 转换为不同进制字符串
Integer.toBinaryString(255) // "11111111"
Integer.toOctalString(255) // "377"
Integer.toHexString(255) // "ff"
// 从不同进制字符串解析
Integer.parseInt("ff", 16) // 255
Integer.parseInt("1010", 2) // 10
十六进制的应用场景
1. 颜色编码
/* RGB 颜色 */
color: #FF5733; /* 十六进制 */
color: rgb(255, 87, 51); /* 十进制 */
2. 内存地址
0x00400000 // 程序入口地址
0x7FFF FFFF // 栈顶地址
3. 哈希值
MD5: d41d8cd98f00b204e9800998ecf8427e
SHA-256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
4. 网络协议
MAC 地址: 00:1A:2B:3C:4D:5E
IPv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
5. 文件格式
PNG 文件头: 89 50 4E 47
ZIP 文件头: 50 4B 03 04
位运算
十六进制常用于位运算:
// 位与
0xFF & 0x0F // 0x0F
// 位或
0xF0 | 0x0F // 0xFF
// 位异或
0xFF ^ 0x0F // 0xF0
// 左移
0x01 << 4 // 0x10
// 右移
0x10 >> 2 // 0x04
在线工具
使用 jsjson.com 十六进制工具 进行进制转换:
- 十进制 ↔ 十六进制
- 二进制 ↔ 十六进制
- 批量转换
总结
十六进制和二进制是程序员的必备知识。掌握进制转换,理解位运算,可以更好地理解计算机底层原理。