二进制和十六进制

在单片机、寄存器开发中,二进制和十六进制是你每天都要打交道的东西。别被它们吓到,其实**十六进制就是给人类看的二进制简写版**。

因为写一长串 `00101000` 很容易眼花数错,所以工程师发明了十六进制来偷懒。

下面我用最通俗的方式,教你彻底搞懂它们之间的转换。


一、 核心黄金法则:4位二进制 = 1位十六进制

这是所有的核心!记住这一条就够了。

* 二进制只有 `0` 和 `1`(逢二进一)。

* 十六进制有 `0-9` 以及 `A-F`(逢十六进一)。

* 因为 \(2^4 = 16\),所以**刚好 4 个二进制位,完美对应 1 个十六进制位**。

在寄存器(8位)里,正好可以分成**两半**:

`高4位 低4位` ➡️ 对应 ➡️ `1个16进制字符 1个16进制字符`


二、 必须背下来的"4位对照表"

初学时,你可以直接查表。熟练后就能一眼看穿:

| 十六进制 | 二进制 (4位) | 记忆窍门 |

| :--- | :--- | :--- |

| **0** | `0000` | 全 0 |

| **1** | `0001` | 只有最右边是 1 |

| **2** | `0010` | |

| **3** | `0011` | 1+2=3 |

| **4** | `0100` | |

| **5** | `0101` | 4+1=5 |

| **6** | `0110` | 4+2=6 |

| **7** | `0111` | 4+2+1=7 |

| **8** | `1000` | |

| **9** | `1001` | 8+1=9 |

| **A (10)** | `1010` | 8+2=10 |

| **B (11)** | `1011` | 8+2+1=11 |

| **C (12)** | `1100` | 8+4=12 |

| **D (13)** | `1101` | 8+4+1=13 |

| **E (14)** | `1110` | 8+4+2=14 |

| **F (15)** | `1111` | 全 1 |


三、 怎么把二进制转成十六进制?(分组法)

**口诀:从右往左,四位一组,不够补零,各自转换。**

**实战案例 1:** 我们之前算出来的配置 `0010 1000`

  1. **分组**:已经4位一组分好了(如果没分好,就从右向左每4位划一条线)。

  2. **查表/计算**:

* 左边 `0010` = **2**

* 右边 `1000` = **8**

  1. **拼起来**:结果就是 **`0x28`**。

**实战案例 2:** 寄存器默认值 `0110 1011`

  1. **分组**:`0110` 和 `1011`

  2. **转换**:

* `0110` = 4+2 = **6**

* `1011` = 8+2+1 = **B** (11)

  1. **拼起来**:结果就是 **`0x6B`**。(巧了,这就是 PWR_MGMT_1 的寄存器地址)。

**实战案例 3:** 只有 7 位的二进制 `101 1100` (比如某传感器数据)

  1. **补零分组**:从右往左四位一组,左边不够补零,变成 `0101` 和 `1100`。

  2. **转换**:

* `0101` = **5**

* `1100` = **C** (12)

  1. **拼起来**:结果就是 **`0x5C`**。

四、 怎么把十六进制转回二进制?(拆解法)

写代码时,你看到手册上的 `0x28`,要立刻能反推出它是哪几个位被置 1 了。

**口诀:一位拆四位。**

**实战案例:** 看到 `0xBC`

  1. **拆解**:`B` 和 `C`

  2. **各自展开**:

* `B` (11) = `1011` (8+2+1)

* `C` (12) = `1100` (8+4)

  1. **拼起来**:`1011 1100`。

*(注意:看到 `0x` 开头,就代表这是十六进制数,这是语法约定,不用参与转换)*


💡 硬核口算技巧(权重法)

不想查表怎么快速算?看这 4 个数字的权重:**8、4、2、1**(从左到右)。

比如拿到二进制 `1101`:

* 第1位是 1,代表 **8** (加上)

* 第2位是 1,代表 **4** (加上)

* 第3位是 0,代表 2 (不要)

* 第4位是 1,代表 **1** (加上)

* 结果:8 + 4 + 1 = **13**(也就是十六进制的 **D**)。

反过来,要转 `0x9`(即十进制的9):

9 = 8 + 1,所以第1位(8)和第4位(1)是1,中间两位是0 ➡️ **`1001`**。


📝 结合 MPU6050 的实战复习

假设你写代码时,想**同时开启睡眠(Bit6=1),开启循环(Bit5=1)**,其他全为0:

* 二进制:`0110 0000`

* 分两半:

* 左边 `0110` = 4+2 = **6**

* 右边 `0000` = **0**

* 十六进制:**`0x60`**

假设你读了寄存器 `0x6B` 的值,发现是 **`0x41`**:

* 拆开:`4` 和 `1`

* 展开:`0100 0001`

* 对照手册:Bit6 是 1(在睡眠),Bit0 是 1(时钟选 X 轴)。

只要你把上面那张 **"4位对照表"** 放在手边,或者心里默念 **8,4,2,1** 的权重,90% 的转换你 3 秒钟就能在脑子里完成!

相关推荐
国科安芯4 小时前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射
TST-魚爷4 小时前
小型视频会议室音频踩坑:一体化拾音扩音方案实测分享(易视讯)
stm32·电脑·音视频·钉钉·腾讯会议·zoom会议
不昀6 小时前
RMII切到10Mbps,50MHz参考时钟也要降到5MHz吗?
单片机·嵌入式硬件·硬件设计·以太网接口
路上有只喵7 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇6
单片机·嵌入式硬件
集芯微电科技有限公司8 小时前
40V/24A高频率增强型GaN HEMT功率开关管/高频DC转换/电动工具/GaN充电器 方案首选
人工智能·科技·单片机·嵌入式硬件·深度学习·神经网络·生成对抗网络
十八岁牛爷爷9 小时前
STM32H7 长时间运行后 HTTP 断连:从“串口还活着”到 TX 描述符错账
stm32·单片机·嵌入式硬件
Lxx_Zw9 小时前
串口命令如何从字符串长成协议:帧头、长度、校验和与状态机
c语言·stm32·单片机·嵌入式硬件
凯基迪科技10 小时前
瑞萨R5F100解密 R8C/RL78 MCU 固件读取与保护机制详解
服务器·网络·单片机
mk01511 小时前
单片机同步降压稳压器输出最低1V,关断时损耗3uA
单片机·嵌入式硬件·硬件工程·智能硬件·pcb工艺