返回 课程

信奥AC之路-1级

0% 完成
0/0 步骤
  1. 第1课 开发环境与基础输出
    5 主题|小节
  2. 第2课 算术运算符
    7 主题|小节
  3. 第3课 printf与运算输出
    7 主题|小节
  4. 第4课 数的进制与拆位
    6 主题|小节
  5. 第5课 变量与基础运算
    17 主题|小节
  6. 第6课 常量与取整运算
    8 主题|小节
  7. 第7课 关系运算
    8 主题|小节
  8. 第8课 逻辑运算
    9 主题|小节
  9. 第9课 输入与计算进阶
    10 主题|小节
  10. 第10课 if语句及双分支语句
    8 主题|小节
  11. 第11课 if语句及双分支进阶
    11 主题|小节
  12. 第12课 三目运算
    9 主题|小节
  13. 第13课 多分支、多if和switch语句
    11 主题|小节
  14. 第14课 循环(基本输出)
    7 主题|小节
  15. 第15课 循环(While+If)
    8 主题|小节
  16. 第16课 循环(计数、求和、求乘积)
    10 主题|小节
  17. 第17课 循环进阶(While+)
    8 主题|小节
  18. 第18课 do-while及while其他用法
    8 主题|小节
  19. 第19课 For循环基础
    9 主题|小节
  20. 第20课 For循环进阶
    8 主题|小节
课 4, 主题|小节 3
进行中

4.2 认识其他进制

2025年9月22日
课 进展
0% 完成

小丽突然问道:”小C老师,我在电脑上看到过0b、0和0x开头的数字,这是什么呢?”

“啊,这就是不同的进制表示法,让我们一起来了解一下!”

4.2.1 二进制(0b开头)

[图片:展示二进制数转换为十进制的过程]

// 二进制数的表示
printf("%dn", 0b1010);  // 输出十进制:10
printf("%dn", 0b1111);  // 输出十进制:15

二进制只用0和1两个数字:

  • 0b1010 = 1×8 + 0×4 + 1×2 + 0×1 = 10
  • 0b1111 = 1×8 + 1×4 + 1×2 + 1×1 = 15

练习题:

  1. 选择题:二进制数0b1100表示的十进制数是多少?
    A. 6
    B. 10
    C. 12
    D. 14

正确答案:C
解析:0b1100 = 1×8 + 1×4 + 0×2 + 0×1 = 12

  1. 判断题:在C++中,二进制数必须以0b开头。

正确答案:√
解析:0b是C++中表示二进制数的前缀标识符。

4.2.2 八进制(0开头)

[图片:展示八进制数转换为十进制的过程]

// 八进制数的表示
printf("%dn", 012);  // 输出十进制:10
printf("%dn", 017);  // 输出十进制:15

八进制用0-7八个数字:

  • 012 = 1×8 + 2×1 = 10
  • 017 = 1×8 + 7×1 = 15

练习题:

  1. 选择题:八进制数014表示的十进制数是多少?
    A. 14
    B. 12
    C. 10
    D. 8

正确答案:B
解析:014 = 1×8 + 4×1 = 12

  1. 判断题:八进制数可以包含数字8和9。

正确答案:×
解析:八进制只能使用0-7这八个数字。

4.2.3 十六进制(0x开头)

[图片:展示十六进制数和对应的十进制值,以及A-F代表的数值]

// 十六进制数的表示
printf("%dn", 0xA);   // 输出十进制:10
printf("%dn", 0xF);   // 输出十进制:15
printf("%dn", 0x1F);  // 输出十进制:31

十六进制用0-9和A-F:

  • A代表10,B代表11,C代表12
  • D代表13,E代表14,F代表15
  • 0x1F = 1×16 + 15×1 = 31

🔬 实验二:进制转换

// 同一个数的不同进制表示
printf("十进制:%dn", 10);     // 输出:10
printf("二进制:%dn", 0b1010); // 输出:10
printf("八进制:%dn", 012);    // 输出:10
printf("十六进制:%dn", 0xA);  // 输出:10

练习题:

  1. 选择题:十六进制数0x1A表示的十进制数是多少?
    A. 20
    B. 26
    C. 30
    D. 36

正确答案:B
解析:0x1A = 1×16 + 10×1 = 26

  1. 判断题:在十六进制中,字母A-F可以使用大写或小写。

正确答案:√
解析:十六进制中的字母A-F不区分大小写,0xA和0xa表示相同的值。

进制运算练习题

[图片:展示不同进制之间的转换示例和计算过程]

一、选择题

  1. C++表达式0b11+0b10+0b01的值为多少?
    A. 7
    B. 8
    C. 9
    D. 10

正确答案:B
解析:

  • 0b11 = 3(十进制)
  • 0b10 = 2(十进制)
  • 0b01 = 1(十进制)
  • 3 + 2 + 1 = 8
  1. C++表达式011+012+013的值为多少?
    A. 36
    B. 28
    C. 30
    D. 24

正确答案:B
解析:

  • 011(八进制)= 9(十进制)
  • 012(八进制)= 10(十进制)
  • 013(八进制)= 11(十进制)
  • 9 + 10 + 11 = 30(十进制)
  1. C++表达式0xA+0xB+0xC的值为多少?
    A. 35
    B. 39
    C. 41
    D. 45

正确答案:B
解析:

  • 0xA = 10(十进制)
  • 0xB = 11(十进制)
  • 0xC = 12(十进制)
  • 10 + 11 + 12 = 39
  1. C++表达式0b1111+0b0001+0b0010的值为多少?
    A. 18
    B. 19
    C. 20
    D. 21

正确答案:A
解析:

  • 0b1111 = 15(十进制)
  • 0b0001 = 1(十进制)
  • 0b0010 = 2(十进制)
  • 15 + 1 + 2 = 18
  1. C++表达式0x1F+0x20+0x21的值为多少?
    A. 96
    B. 92
    C. 90
    D. 88

正确答案:A
解析:

  • 0x1F = 31(十进制)
  • 0x20 = 32(十进制)
  • 0x21 = 33(十进制)
  • 31 + 32 + 33 = 96

二、判断题

  1. C++表达式0b10+0b11+0b100的值等于0x0F。( )

正确答案:错误
解析:

  • 0b10 = 2(十进制)
  • 0b11 = 3(十进制)
  • 0b100 = 4(十进制)
  • 2 + 3 + 4 = 9(十进制)
  • 0x0F = 15(十进制)
  • 9 ≠ 15,所以表达式错误
  1. C++表达式07+010+011的值等于24。( )

正确答案:正确
解析:

  • 07 = 7(十进制)
  • 010 = 8(十进制)
  • 011 = 9(十进制)
  • 7 + 8 + 9 = 24
  1. C++表达式0xA+0x9+0x8的值等于33。( )

正确答案:正确
解析:

  • 0xA = 10(十进制)
  • 0x9 = 9(十进制)
  • 0x8 = 8(十进制)
  • 10 + 9 + 8 = 33
  1. C++表达式0b1010+0b1011+0b1100的值等于0x21。( )

正确答案:正确
解析:

  • 0b1010 = 10(十进制)
  • 0b1011 = 11(十进制)
  • 0b1100 = 12(十进制)
  • 10 + 11 + 12 = 33
  • 0x21 = 33(十进制)
  1. C++表达式015+016+017的值等于40。( )

正确答案:错误
解析:

  • 015 = 13(十进制)
  • 016 = 14(十进制)
  • 017 = 15(十进制)
  • 13 + 14 + 15 = 42 ≠ 40

真题精讲

真题1:

C++表达式010+100+001的值为111。( )

正确答案:错误

详细解析:

  1. 表达式分析:

    • 010+100+001
    • 注意:010和001都是八进制数
  2. 关键点:

    • 在C++中,以0开头的数字会被当作八进制数处理
    • 010(八进制)= 8(十进制)
    • 001(八进制)= 1(十进制)
  3. 计算过程:

    • 010 = 8(八进制转十进制)
    • 100 = 100(十进制)
    • 001 = 1(八进制转十进制)
    • 总和 = 8 + 100 + 1 = 109(不是111)
  4. 验证代码:

printf("%dn", 010+100+001);  // 输出:109

因此010+100+001的计算结果为109,不是111,所以原命题判断错误。

知识点提示:

  • 以0开头的数字在C++中会被解释为八进制数
  • 八进制数010等于十进制的8
  • 八进制数001等于十进制的1
  • 不以0开头的数字100保持十进制形式