进制与编码¶
方法速览¶
| 任务 | 方法 | 口诀 |
|---|---|---|
| 跨进制比大小 | 全部转十进制再比 | 统一十进制 |
| 二进制加法 | 逢二进一逐位加 | 逢二进一 |
| 按位逻辑或 | 有 1 为 1 | 见一得一 |
| 大小端 | 小端=低字节在低地址 | 小低低 |
| 十六进制 | 一位顶四位 | 十六拆四 |
跨进制比较¶
【例】(2020 真题)比较 \(550_{10}\)、\(777_8\)、\(2^{10}\)、\(22F_{16}\):
| 候选 | 换算 | 十进制值 |
|---|---|---|
| \((550)_{10}\) | — | \(550\) |
| \((777)_8\) | \(7\times64+7\times8+7\) | \(511\) |
| \(2^{10}\) | — | \(\bf 1024\) |
| \((22F)_{16}\) | \(2\times256+2\times16+15\) | \(567\) |
最大的是 \(2^{10} = 1024\)。
按位逻辑运算¶
同宽度二进制按位独立运算:& 同 1 为 1、| 有 1 为 1、^ 不同为 1。
【例】(2019 真题)11 1011 1001 0111 | 01 0110 1110 1011:
| 高 4 位 | 中间 | 低 8 位 | |
|---|---|---|---|
| A | 0011 1011 |
1001 |
0111 |
| B | 0001 0110 |
1110 |
1011 |
| A|B | 0011 1111 |
1111 |
1111 |
结果按 4 位分组 \(0011\,1111\,1111\,1111\),即 11 1111 1111 1111——逐位竖式对齐,有 1 为 1。
大小端¶
多字节数据在内存里的字节顺序:
| 模式 | 规则 | 0xDEADBEEF 首字节(低地址) |
|---|---|---|
| 小端 Little Endian | 低字节存低地址 | EF |
| 大端 Big Endian | 高字节存低地址 | DE |
【例】(2022 真题)unsigned x = 0xDEADBEEF; p = (unsigned char*)&x; printf("%X", *p);:小端机取到低字节 EF、大端机取到 DE。
练习题目¶
练习 1 · 八进制转十进制¶
题目
\((777)_8\) = ( )
- A. \(512\)
- B. \(777\)
- C. \(511\)
- D. \(504\)
答案与解析
答案:C
\(7\times64 + 7\times8 + 7 = 448+56+7 = 511\)。
练习 2 · 十六进制转十进制¶
题目
\((22F)_{16}\) = ( )
- A. \(495\)
- B. \(559\)
- C. \(575\)
- D. \(567\)
答案与解析
答案:D
\(2\times256 + 2\times16 + 15 = 567\)(F = 15)。
练习 3 · 跨进制比大小¶
题目
下列最大的是( )
- A. \((100)_2\)
- B. \((100)_{16}\)
- C. \((100)_8\)
- D. \((100)_{10}\)
答案与解析
答案:B
同样写法底越大值越大:\(4 < 64 < 256\)(中间隔着 \(100_{10}\))。
练习 4 · 二进制加法¶
题目
\(00101010_2 + 00010110_2\) = ( )
- A. \(00111110_2\)
- B. \(01000000_2\)
- C. \(01000010_2\)
- D. \(00111100_2\)
答案与解析
答案:B
\(42 + 22 = 64 = 1000000_2\)——逢二进一逐位竖式(2021 真题模型)。
练习 5 · 二进制减法¶
题目
\(10000_2 - 1_2\) = ( )
- A. \(10001_2\)
- B. \(11111_2\)
- C. \(01111_2\)
- D. \(01110_2\)
答案与解析
答案:C
\(16 - 1 = 15 = 1111_2\)——连续借位。
练习 6 · 按位或¶
题目
\(1010_2 \,|\, 0101_2\) = ( )
- A. \(0101_2\)
- B. \(0000_2\)
- C. \(1010_2\)
- D. \(1111_2\)
答案与解析
答案:D
每位都恰有一个 1 → 全 1。
练习 7 · 按位与¶
题目
\(1100_2 \,\&\, 1010_2\) = ( )
- A. \(0110_2\)
- B. \(1110_2\)
- C. \(1000_2\)
- D. \(1010_2\)
答案与解析
答案:C
同 1 为 1:只有最高位双方都是 1。
练习 8 · 异或¶
题目
\(1010_2 \wedge 1001_2\) = ( )
- A. \(0011_2\)
- B. \(1100_2\)
- C. \(1011_2\)
- D. \(0000_2\)
答案与解析
答案:A
不同为 1:低两位不同。
练习 9 · 大小端判断¶
题目
小端机 unsigned x = 1; unsigned char* p = (unsigned char*)&x; 则 *p = ( )
- A. 未定义
- B. \(0\)
- C. \(255\)
- D. \(1\)(低字节 01 存在低地址)
答案与解析
答案:D
小端:\(01\,00\,00\,00\)——最低地址放最低字节,读出来是 1。
练习 10 · 大端判断¶
题目
大端机 unsigned x = 0x12345678; 首字节(最低地址)是( )
- A. \(0x78\)
- B. \(0x12\)
- C. \(0x34\)
- D. \(0x56\)
答案与解析
答案:B
大端:高位字节 \(12\) 存低地址——“读起来顺着写”。
练习 11 · 二进制 ↔ 十六进制¶
题目
\(1101\,1011_2\) 直接转十六进制是( )
- A. \(DB_{16}\)
- B. \(CD_{16}\)
- C. \(B D\) 任意序
- D. \(E3_{16}\)
答案与解析
答案:A
四位一组:\(1101 = D\)、\(1011 = B\)。
练习 12 · 二进制 ↔ 八进制¶
题目
\(11\,010\,111_2\) 转八进制是( )
- A. \(153_8\)
- B. \(657_8\)
- C. \(327_8\)
- D. \(723_8\)
答案与解析
答案:C
三位一组:\(011=3\)、\(010=2\)、\(111=7\)。
练习 13 · 幂次速记¶
题目
\(2^{16}\) = ( )
- A. \(65536\)
- B. \(32768\)
- C. \(65535\)
- D. \(131072\)
答案与解析
答案:A
\(2^{10}=1024\)、\(2^{16} = 1024\times64 = 65536\)。
练习 14 · 移位与乘法¶
题目
\(5 << 3\) = ( )
- A. \(125\)
- B. \(15\)
- C. \(8\)
- D. \(40\)
答案与解析
答案:D
左移 n 位 = 乘 \(2^n\):\(5\times8 = 40\)。
练习 15 · 移位与除法¶
题目
\(20 >> 2\) = ( )
- A. \(5\)
- B. \(10\)
- C. \(80\)
- D. \(4\)
答案与解析
答案:A
右移 2 位 = 除 4 向下取整:\(20/4 = 5\)。
练习 16 · 位数估算¶
题目
表示 \(0 \sim 999\) 的数至少需要( )位二进制。
- A. \(8\)
- B. \(9\)
- C. \(12\)
- D. \(10\)
答案与解析
答案:D
\(2^{10} - 1 = 1023 \ge 999 > 511 = 2^9 - 1\)。
练习 17 · 按位取反¶
题目
~0x0F(8 位下)= ( )
- A.
0xF0 - B.
0x0F - C.
0xFF - D.
0x00
答案与解析
答案:A
每位翻转:低 4 位 1 变 0、高 4 位 0 变 1。
练习 18 · 异或自反¶
题目
\(x \wedge x\) 与 \(x \wedge 0\) 分别是( )
- A. \(x\) 与 \(0\)
- B. \(0\) 与 \(x\)
- C. 都是 \(x\)
- D. 都是 \(0\)
答案与解析
答案:B
异或自身抵消、与 0 不变——成对消去的基石。
练习 19 · 十六进制加法¶
题目
\(3A_{16} + 2B_{16}\) = ( )
- A. \(65_{16}\)
- B. \(5F_{16}\)
- C. \(64_{16}\)
- D. \(6E_{16}\)
答案与解析
答案:A
\(A+B = 19_{10} = 1\,3_{16}\) 写 3 进 1;\(3+2+1 = 6\) → \(65_{16}\)。
练习 20 · 原码补码衔接¶
题目
\(-1\) 的 8 位补码是( )
- A. \(11111111\)
- B. \(10000001\)
- C. \(01111111\)
- D. \(00000001\)
答案与解析
答案:A
反码 +1:\(11111110 + 1 = 11111111\)——全 1 就是 −1。
练习 21 · 位计数¶
题目
\(255_{10}\) 的二进制中有( )个 1。
- A. \(7\)
- B. \(8\)
- C. \(9\)
- D. \(4\)
答案与解析
答案:B
\(255 = 11111111_2\)——8 位全 1。
练习 22 · 混合进制运算¶
题目
\((10)_2 + (10)_8 + (10)_{16}\) = (十进制)( )
- A. \(22\)
- B. \(30\)
- C. \(26\)
- D. \(24\)
答案与解析
答案:C
\(2 + 8 + 16 = 26\)——先统一进制再相加。
练习 23 · 网络字节序¶
题目
网络字节序通常采用( )
- A. 大端
- B. 小端
- C. 与主机一致
- D. 压缩序
答案与解析
答案:A
网络传输按大端(高位先发)。
练习 24 · 编码对照¶
题目
一个字节能表示的无符号数范围是( )
- A. \(0 \sim 255\)
- B. \(-128 \sim 127\)
- C. \(0 \sim 256\)
- D. \(1 \sim 256\)
答案与解析
答案:A
\(2^8 = 256\) 个值从 0 起;B 是有符号解释。
练习 25 · 高低字节¶
题目
十六进制数 \(0xABCD\) 的高字节是( )
- A. \(0xCD\)
- B. \(0xAB\)
- C. \(0xABCD\)
- D. \(0xBA\)
答案与解析
答案:B
书写左侧(权值大)是高字节。
练习 26 · 综合判断¶
题目
下列错误的是( )
- A. 小端机低字节在低地址
- B. 大端机
0x0102的首字节是0x01 - C. 二进制转十六进制按 4 位分组
- D. 小端机
0xDEADBEEF首字节是DE
答案与解析
答案:D
小端首字节是低字节 EF;D 说的是大端。
历年真题¶
2019 年 · 第 3 题¶
题目
二进制数 11 1011 1001 0111 和 01 0110 1110 1011 进行逻辑或运算的结果是( )。
- A.
11 1111 1111 1101 - B.
11 1111 1101 1111 - C.
11 1111 1111 1111 - D.
10 1111 1111 1111
答案与解析
答案:C
逐位有 1 为 1(竖式演算见教学节):\(0011\,1011\,1001\,0111 \,|\, 0001\,0110\,1110\,1011 = 0011\,1111\,1111\,1111\)。
2020 年 · 第 1 题¶
题目
请选择以下最大的数( )
- A. \((550)_{10}\)
- B. \((777)_8\)
- C. \(2^{10}\)
- D. \((22F)_{16}\)
答案与解析
答案:C
全转十进制(换算表见教学节):\(511 < 550 < 567 < 1024\),最大的是 \(2^{10} = 1024\)。
2021 年 · 第 2 题¶
题目
二进制数 \(00101010_2\) 和 \(00010110_2\) 的和为( )。
- A. \(00111100_2\)
- B. \(01000000_2\)
- C. \(00111110_2\)
- D. \(01000010_2\)
答案与解析
答案:B
\(42 + 22 = 64 = 01000000_2\)。
2022 年 · 第 6 题¶
题目
计算机系统用小端(Little Endian)和大端(Big Endian)来描述多字节数据的存储地址顺序模式,其中小端表示将低位字节数据存储在低地址的模式、大端表示将高位字节数据存储在低地址的模式。在小端模式的系统和大端模式的系统分别编译和运行以下 C++ 代码段表示的程序,将分别输出什么结果?( )
- A.
EF、EF - B.
EF、DE - C.
DE、EF - D.
DE、DE
答案与解析
答案:B
*p 读最低地址的一字节:小端存的是低字节 EF、大端存的是高字节 DE。
易错小结¶
- 跨进制比较全部转十进制(2020 真题 \(2^{10} = 1024\) 最大);
- 按位或“有 1 为 1”逐位竖式(2019 真题);二进制加法逢二进一(2021);
- 小端 = 低字节在低地址(口诀“小低低”);读
*p是读最低地址那个字节(2022 真题 EF/DE); - 二↔十六按 4 位、二↔八按 3 位分组;移位即乘除 \(2^n\);
- \(-1\) 补码全 1;网络字节序是大端。