一文搞懂:二进制、十进制、十六进制换算与字节表示原理
在计算机编程和底层开发中,二进制、十进制、十六进制的转换是基础中的基础。很多新手会困惑:为什么计算机偏爱二进制?为什么用0x加两位字符表示一个字节?本文结合239(十进制)、11101111(二进制)、0xEF(十六进制)的实例,把这些问题讲透。
一、三种进制的核心定义
首先明确三种进制的本质:不同的计数规则,核心区别是“逢几进一”。
| 进制 | 基数 | 计数规则 | 字符集 | 示例(对应同一个值) |
|---|---|---|---|---|
| 十进制 | 10 | 逢10进1 | 0-9 | 239 |
| 二进制 | 2 | 逢2进1 | 0、1 | 11101111 |
| 十六进制 | 16 | 逢16进1 | 0-9 + A-F(对应10-15) | 0xEF |
注:十六进制中A-F不区分大小写,0xEF和0xef表示同一个值。
二、核心换算关系(以239为例)
1. 十进制 ↔ 二进制(基础方法)
(1)十进制转二进制:除2取余法
以239为例,反复除以2直到商为0,余数倒序排列:
1 | |
倒序取余数 → 11101111。
(2)二进制转十进制:按位权展开
二进制11101111的每一位对应2^7到2^0的权值,求和:
1 | |
2. 十进制 ↔ 十六进制(简化方法)
(1)十进制转十六进制:除16取余法
1 | |
倒序取余数 → EF,规范写法加前缀0xEF。
(2)十六进制转十进制:按位权展开
1 | |
3. 二进制 ↔ 十六进制(最快捷径)
核心原理:1位十六进制 = 4位二进制(因为2^4=16),这是效率最高的转换方式,推荐优先使用。
(1)二进制转十六进制:4位分组
将11101111从右往左每4位分组(不足补0):
1 | |
结果 → EF。
(2)十六进制转二进制:查表替换
记住4位二进制对照表,直接替换:
| 十六进制 | 二进制 | 十六进制 | 二进制 |
|---|---|---|---|
| 0 | 0000 | 8 | 1000 |
| 1 | 0001 | 9 | 1001 |
| 2 | 0010 | A | 1010 |
| 3 | 0011 | B | 1011 |
| 4 | 0100 | C | 1100 |
| 5 | 0101 | D | 1101 |
| 6 | 0110 | E | 1110 |
| 7 | 0111 | F | 1111 |
示例:0xEF → E(1110) + F(1111) → 11101111。
4. 换算流程可视化
graph LR
A[十进制239] -->|除16取余| B[十六进制EF]
B -->|4位替换| C[二进制11101111]
C -->|按位权展开| A
A -->|除2取余| C
C -->|4位分组| B
B -->|按位权展开| A
三、为什么用0x+两位字符表示一个字节?
1. 先明确:什么是“字节”?
计算机最小的可寻址存储单位是字节(Byte),1字节 = 8位二进制(bit)。
8位二进制的取值范围:00000000(0)~ 11111111(255)。
2. 核心原因:十六进制是二进制的“精简表示”
- 8位二进制 → 拆分为2组4位二进制 → 对应2位十六进制(
00~`FF`)。 - 十进制需要3位(0~255),二进制需要8位,而十六进制仅需2位,书写和阅读最简洁。
3. 0x前缀的作用
0x是编程领域的十六进制标识,目的是避免混淆:
- 比如
239是十进制,0x239是十六进制(对应十进制569); - 比如
EF可能被误解为字符串,0xEF明确是十六进制数值。
4. 代码示例:验证换算关系
以Python为例,直观验证三种进制的转换:
1 | |
四、总结
- 换算核心技巧:十进制转二进制优先走“十进制→十六进制→二进制”捷径,利用“1位十六进制=4位二进制”减少计算量;
- 字节表示原理:1字节=8位二进制,恰好对应2位十六进制,
0x前缀明确标识十六进制,是计算机中表示字节最简洁的方式; - 记忆关键点:记住4位二进制与十六进制的对照表,能大幅提升换算效率。
掌握这些规则后,你就能快速在三种进制间切换,理解计算机底层的数值表示逻辑。
一文搞懂:二进制、十进制、十六进制换算与字节表示原理
https://jycpp.github.io/26-01-01-一文搞懂二进制十进制十六进制换算与字节表示原理.html