本讲定位:三级的第一讲,也是三级三大新常识块(进制 → 编码 → 位运算)的地基。官方大纲把「二进制、八进制、十进制、十六进制」列为三级知识块 2,在客观题里几乎每套必考,且不止一道。这一讲没有任何算法难度,全部是手算 + 背表,但它决定了后面第 02 讲(原码反码补码)和第 03 讲(位运算)能不能听懂——那两讲的每一个概念都写在二进制上。
对应官方大纲:三级知识块 2「进制转换」——二进制、八进制、十进制、十六进制。
前置知识:一级第 05 讲(整除与求余——本讲的除基取余法全靠
/和%)、一级第 08 讲(循环)、二级第 04 讲(ASCII 编码)。代码说明:本讲所有代码均已用 g++ 11.5(
-std=c++11)编译运行验证,输出结果即为文中标注结果。
第一道(单选):
十进制数 $45$ 转换为二进制数是( ) A.
101101B.110101C.101011D.111001
第二道(单选):
二进制数
11011010转换为十六进制数是( ) A.ADB.DAC.BCD.1A2
第三道(判断):
C++ 中,
int a = 010;执行后a的值是 $10$。( )
答案:第一道选 A,第二道选 B,第三道错误(
a的值是 8)。
- 第一道用除 2 取余:$45 \to 101101$。
- 第二道用四位一组:
1101 1010→D A。注意分组一定从右往左。- 第三道是 C++ 特有的坑:以
0开头的整数字面量是八进制,010就是八进制的 10,等于十进制 $8$。
这三道题分别对应本讲的三块内容:十进制转出去、二进制与十六进制互转、C++ 里怎么写和怎么输出各种进制。
一句话:因为电路只分得清”通”和”断”两种状态。
| 十进制 | 二进制 | |
|---|---|---|
| 用到的数字 | 0~9,共 10 个 |
0、1,共 2 个 |
| 硬件如何表示 | 需要区分 10 种电压等级 | 只需区分”有电/ 没电” |
| 可靠性 | 电压稍有波动就认错 | 极难认错 |
📌 官方常考的措辞:计算机内部一切数据(数字、字符、图片、声音)最终都以二进制形式存储。选择题里出现”计算机中的数据以十进制存储”一定是错的。
💡 那既然二进制这么好,为什么还要八进制和十六进制?因为二进制太长,人读不了。 一个
int是 32 位二进制,写出来一行都放不下;换成十六进制只要 8 位。八进制和十六进制是给人看的二进制缩写,不是计算机内部的另一套存储方式。
任何进制都遵守同一条规则:每一位的值 = 这一位的数字 × 这一位的位权,位权是基数的幂,从右往左依次是 $0$ 次、$1$ 次、$2$ 次……