返回 课程
信奥AC之路-1级
0% 完成
0/0 步骤
-
第1课 开发环境与基础输出5 主题|小节
-
第2课 算术运算符7 主题|小节
-
第3课 printf与运算输出7 主题|小节
-
第4课 数的进制与拆位6 主题|小节
-
第5课 变量与基础运算17 主题|小节
-
第6课 常量与取整运算8 主题|小节
-
第7课 关系运算8 主题|小节
-
第8课 逻辑运算9 主题|小节
-
第9课 输入与计算进阶10 主题|小节
-
第10课 if语句及双分支语句8 主题|小节
-
第11课 if语句及双分支进阶11 主题|小节
-
第12课 三目运算9 主题|小节
-
第13课 多分支、多if和switch语句11 主题|小节
-
第14课 循环(基本输出)7 主题|小节
-
第15课 循环(While+If)8 主题|小节
-
第16课 循环(计数、求和、求乘积)10 主题|小节
-
第17课 循环进阶(While+)8 主题|小节
-
第18课 do-while及while其他用法8 主题|小节
-
第19课 For循环基础9 主题|小节
-
第20课 For循环进阶8 主题|小节
课 进展
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
练习题:
- 选择题:二进制数0b1100表示的十进制数是多少?
A. 6
B. 10
C. 12
D. 14
正确答案:C
解析:0b1100 = 1×8 + 1×4 + 0×2 + 0×1 = 12
- 判断题:在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
练习题:
- 选择题:八进制数014表示的十进制数是多少?
A. 14
B. 12
C. 10
D. 8
正确答案:B
解析:014 = 1×8 + 4×1 = 12
- 判断题:八进制数可以包含数字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
练习题:
- 选择题:十六进制数0x1A表示的十进制数是多少?
A. 20
B. 26
C. 30
D. 36
正确答案:B
解析:0x1A = 1×16 + 10×1 = 26
- 判断题:在十六进制中,字母A-F可以使用大写或小写。
正确答案:√
解析:十六进制中的字母A-F不区分大小写,0xA和0xa表示相同的值。
进制运算练习题
[图片:展示不同进制之间的转换示例和计算过程]
一、选择题
- C++表达式0b11+0b10+0b01的值为多少?
A. 7
B. 8
C. 9
D. 10
正确答案:B
解析:
- 0b11 = 3(十进制)
- 0b10 = 2(十进制)
- 0b01 = 1(十进制)
- 3 + 2 + 1 = 8
- C++表达式011+012+013的值为多少?
A. 36
B. 28
C. 30
D. 24
正确答案:B
解析:
- 011(八进制)= 9(十进制)
- 012(八进制)= 10(十进制)
- 013(八进制)= 11(十进制)
- 9 + 10 + 11 = 30(十进制)
- C++表达式0xA+0xB+0xC的值为多少?
A. 35
B. 39
C. 41
D. 45
正确答案:B
解析:
- 0xA = 10(十进制)
- 0xB = 11(十进制)
- 0xC = 12(十进制)
- 10 + 11 + 12 = 39
- C++表达式0b1111+0b0001+0b0010的值为多少?
A. 18
B. 19
C. 20
D. 21
正确答案:A
解析:
- 0b1111 = 15(十进制)
- 0b0001 = 1(十进制)
- 0b0010 = 2(十进制)
- 15 + 1 + 2 = 18
- C++表达式0x1F+0x20+0x21的值为多少?
A. 96
B. 92
C. 90
D. 88
正确答案:A
解析:
- 0x1F = 31(十进制)
- 0x20 = 32(十进制)
- 0x21 = 33(十进制)
- 31 + 32 + 33 = 96
二、判断题
- C++表达式0b10+0b11+0b100的值等于0x0F。( )
正确答案:错误
解析:
- 0b10 = 2(十进制)
- 0b11 = 3(十进制)
- 0b100 = 4(十进制)
- 2 + 3 + 4 = 9(十进制)
- 0x0F = 15(十进制)
- 9 ≠ 15,所以表达式错误
- C++表达式07+010+011的值等于24。( )
正确答案:正确
解析:
- 07 = 7(十进制)
- 010 = 8(十进制)
- 011 = 9(十进制)
- 7 + 8 + 9 = 24
- C++表达式0xA+0x9+0x8的值等于33。( )
正确答案:正确
解析:
- 0xA = 10(十进制)
- 0x9 = 9(十进制)
- 0x8 = 8(十进制)
- 10 + 9 + 8 = 33
- C++表达式0b1010+0b1011+0b1100的值等于0x21。( )
正确答案:正确
解析:
- 0b1010 = 10(十进制)
- 0b1011 = 11(十进制)
- 0b1100 = 12(十进制)
- 10 + 11 + 12 = 33
- 0x21 = 33(十进制)
- C++表达式015+016+017的值等于40。( )
正确答案:错误
解析:
- 015 = 13(十进制)
- 016 = 14(十进制)
- 017 = 15(十进制)
- 13 + 14 + 15 = 42 ≠ 40
真题精讲
真题1:
C++表达式010+100+001的值为111。( )
正确答案:错误
详细解析:
-
表达式分析:
- 010+100+001
- 注意:010和001都是八进制数
-
关键点:
- 在C++中,以0开头的数字会被当作八进制数处理
- 010(八进制)= 8(十进制)
- 001(八进制)= 1(十进制)
-
计算过程:
- 010 = 8(八进制转十进制)
- 100 = 100(十进制)
- 001 = 1(八进制转十进制)
- 总和 = 8 + 100 + 1 = 109(不是111)
-
验证代码:
printf("%dn", 010+100+001); // 输出:109
因此010+100+001的计算结果为109,不是111,所以原命题判断错误。
知识点提示:
- 以0开头的数字在C++中会被解释为八进制数
- 八进制数010等于十进制的8
- 八进制数001等于十进制的1
- 不以0开头的数字100保持十进制形式