


第一题
判断:
反码运算时,产生的进位需要循环进位,即最高位产生的进位要加回到结果的最低位。
✅ 答案:正确(√)
1、🌈故事
(1)魔法学院有一种非常古老的数字计算方法------
反码运算。
(2)它有一个奇怪的规定。
普通加法:
11111111
+00000001
---------
100000000
最高位多出来一个1。
现代补码:
直接丢掉。
(3)而反码世界却说:
"这个1不能浪费!"
于是它会:
00000000
+1
-------
00000001
(3)这就叫:
循环进位(End Around Carry)
也就是:
最高位产生的进位,
重新加到最低位。
2、为什么?
因为反码存在:
+0
00000000
-0
11111111
为了保证计算正确,
必须采用循环进位。
3、🎯 本题:
最高位产生的进位要重新加回来。
正确。
第二题
判断:
-11 的补码的一种计算方式是从右往左扫描正数的二进制形式,遇到第一个1之后,左边全部取反。
✅ 答案:正确(√)
1、🌈故事
(1)很多同学都会:
原码
↓
取反
↓
加1
但是考试时很慢。
(2)汉克老师告诉大家一个秘诀。
例如:
11
00001011
从右往左找。
00001011
↑
第一个1
这个1以及右边保持不动。
左边全部翻转。
11110101
这就是
-11
的补码。
是不是比:
先取反再加1
快很多?
(3)所以:
这个技巧完全正确。
第三题
判断:
一个8位补码最大的表示范围是 -127~+127。
❌️ 答案:错误(❌️)
🌈故事
1、数字王国有8个士兵。
其中:
第一个负责:
符号
另外7个负责:
数字
2、补码能够表示:
10000000
↓
-128
最大的:
01111111
↓
127
3、所以整个范围:
-128
↓
127
这是必须要能背出来的。
第四题
判断:
判断质数,只需要枚举到√n即可。
✅ 答案:正确(√)
🌈故事
1、小杨想检查:
100
是不是质数。
如果一个一个试:
2
3
4
......
99
太慢了。
2、汉克老师说:
"任何因数都是成对出现。"
例如:
2 × 50
4 × 25
5 × 20
10 ×10
发现没有?
一旦超过:
√100=10
后面的其实前面都检查过了。
3、因此:
判断质数:
for(i=2;i*i<=n;i++)
即可。
效率一下提高很多。
所以本题正确。
第五题
判断:
如果 ((a&1)==1) 为 true,则a一定是奇数。
✅ 答案:正确(√)
🌈故事
1、每个数字都有一扇最右边的小门。
偶数
最后一位
0
(1)例如
6
110
(2)最低位:
0
(3)奇数:
7
111
(4)最低位:
1
2、所以:
a&1
其实就是:
把最后一位留下。
3、例如:
13
1101
&
0001
=
0001
结果为1。
说明:
最低位是1。
就是奇数。
所以本题正确。
第六题
判断:
十六进制 CCF 转换成二进制、八进制、十进制分别是:110011001111、6317、3279。
❌ 答案:错误(×)
🌈故事
1、三个十六进制数字:
C
C
F
2、分别对应:
C
1100
C
1100
F
1111
合起来:
110011001111
正确。
3、再转八进制:
110011001111
↓
110
011
001
111
↓
6
3
1
7
得到:
6317
也正确。
4、十进制呢?
计算:
12×16²
+
12×16
+
15
=
3072
+
192
+
15
=
3279
5、真正答案:
3279
而题目写的是:
3269
错了。
6、因此:
整道判断错误。❌️
第七题
1、题目程序:
string name="GESP";
cout
<<name[false]
<<name[true]
<<name[1<<1]
<<name[7>>1]
<<endl;
判断:
输出结果是 GESP。
✅ 答案:正确(√)
🌈故事
1、字符串:
G E S P
编号:
0 1 2 3
看看四个下标。
2、第一个
false
就是:
0
输出:
G
3、第二个
true
就是:
1
输出:
E
4、第三个
1<<1
=
2
输出:
S
5、第四个
7>>1
=
3
输出:
P
最终:
GESP
所以正确。
第八题
判断:
给出的 Hello World 程序是否能够正常编译运行。
❌️ 答案:错误(❌️)
🌈故事
1、程序:
#include<bits/stdc++.h>
using namespace std;
int main()
{
cout<<"Hello world!"<<endl;
return 0;
}
这是初学者经常使用的,万能头文件程序。
包含:
✅万能头文件
✅命名空间
✅主函数
在DEVC++中,可以正常编译。
2、但是题目说的是编译器,没有说DEVC++编译器,
如果学生使用的编译器,没有收录<bits/stdc++.h>文件,则无法编译。
虽然它在竞赛中非常流行,但在工业级开发中,资深工程师通常禁止使用它。如果你在使用 Visual Studio 等不支持该头文件的 IDE 时想体验其便利,可以通过手动创建文件夹和文件的方式模拟添加,但这并不改变其非标准和潜在性能问题的本质。
注意:它是竞赛编程的利器,却是工程开发的"坏习惯"。请根据代码的生命周期和使用场景酌情选择。
3、如果程序改为:
#include<iostream>
结果是肯定可以编译。
第九题
判断:
模拟算法不能增加任何判断,否则就不是模拟算法。
❌ 答案:错误(×)
🌈故事
1、很多同学认为:
模拟就是:
别人怎么做,
程序就一模一样。
其实模拟算法不是这样子的。
2、例如:
洗牌。
现实:
拿牌
交换
判断
继续
程序当然也可以:
if(...)
或者:
while(...)
3、模拟算法的核心是:
按照题目的规则一步一步模拟整个过程。
至于中间有没有:
if
else
switch
continue
完全允许。
4、所以:
题目说:
不能增加判断。
这是错误的。
第十题
判断:
if(s[i]>='0'&&s[i]<='9')
可以判断是不是数字。
❌ 答案:错误(×)
🌈故事
1、这题容易掉坑!
注意题目说的是:
int 型数字 si
2、而条件:
'0'
'9'
比较的是:
字符ASCII码。
2、来看:
'0'
48
'9'
57
所以:
if(c>='0'&&c<='9')
这里的 c 是字符(char),例如:
char c='5';
才能判断它是不是字符数字。
3、如果:
int x=5;
那么:
5>=48
显然是假。
因此不能用来判断整数5是不是0~9之间。
4、如果判断整数:
if(x>=0&&x<=9)
才是正确写法。
因此本题错误。
🎯 十道判断题总结
| 题号 | 答案 | 核心知识点 |
|---|---|---|
| 1 | √ | 反码循环进位 |
| 2 | √ | 补码快速计算技巧 |
| 3 | ❌️ | 8位补码范围:-128~127 |
| 4 | √ | 质数只需枚举到 √n |
| 5 | √ | a&1 判断奇偶 |
| 6 | ❌️ | CCF 十进制应为 3279,不是3269 |
| 7 | √ | false=0、true=1、移位运算作下标 |
| 8 | ❌️ | 标准 C++ 程序才一定能够编译运行,要注意编译器环境 |
| 9 | ❌️ | 模拟算法允许使用判断语句 |
| 10 | ❌️ | '0'~'9' 只能判断字符,不适用于 int 类型数字 |
这十道判断题几乎覆盖了三级考试中容易混淆的知识点:原码/反码/补码、位运算、字符与整数、字符串下标、模拟算法以及质数优化。把这些理解透彻,今后遇到类似题目就能快速判断,不容易被出题人的"小陷阱"迷惑。









