🏰 第九题:数组村庄的秘密
1、👨🏫老师带你来到“数组村”:
他说:这里的数组都有规则!
来看选项:
A ✔ 先定义再用(必须的)
B ✔ 内存连续(像排队站好)
C ✔ 一般要写大小(对的)
D ✔ 不能整体赋值,但可以一个个改
🤔哪一个是错误的?
2、👉但题目找“错误的”
⚠️关键点在 C:
👉除了字符数组,在定义数组时“[ ]”内必须有常数。
3、字符数组的定义:
char s[] = "hello"; // ✔ 可以不写大小4、但其实其他类型也可以这样初始化:
int a[] = {1,2,3}; // ✔ 也是可以的!👉 所以这句话说得是错误的 ❌
5、✅答案:C
🏰 第十题:位运算变形术
1、🎩魔法问题:
哪个操作“做完还能变回原来的数”?
A 左移再右移 ❌(会丢失高位)
B 右移再左移 ❌(低位丢失)
C 或7再与-8 ❌(信息被覆盖)
D 异或7再异或7 ✔
2、✨为什么?
👉 异或的神奇性质:
a ^ b ^ b = a🎯就像:
👉 “变身 → 再变回来”
3、✅答案:D
🏰 第十一题:相等判断魔法
1、🎯目标:判断 a 是否等于 b
来看:
A ❌ a/b==1(不靠谱)
B ❌ 按位与(不等价)
C ✔ (a ^ b) == 0
D ❌ 按位或不可靠
2、✨重点来了!
👉 如果 a == b:
a ^ b = 0🎯因为每一位都一样!
3、✅答案:C
🏰 第十二题:找最大4的倍数
1、🧠目标:
👉 找 ≤ a 的最大“4的倍数”
💡关键:
4的倍数 = 最后2位是00(二进制)
2、✨神操作:
a & (~3)解释:
~3 = 把最后两位变成0
& = 保留其他位
3、🎯效果:
👉 直接“抹掉最后两位”!
例如:
a = 13 (1101) → 1100 = 124、✅答案:A
🏰 第十三题:交换数字魔法
1、🎩经典魔法:交换 a 和 b
👉 输出是 “24 12”
2、✨异或交换法:
a = a ^ b; b = a ^ b; a = a ^ b;👉 每一步都很关键!
3、题目问填哪一句?
👉 应该填:
B. b = a ^ b
4、✅答案:B
🏰 第十四题:最小值守护者
1、🛡️你要找数组中最小值
(1)经典代码逻辑:
if (array[i] < min) min = array[i];(2)👉 条件必须是:
min > array[i](3)因为:
👉 当前更小 → 更新!
2、本题的问题:
int min = 0;数组中没有比0小的,所以,不会被更新。
3、✅答案:D
🏰 第十五题:神秘结果31
1、🧪题目:
填哪句可以让结果“不是31”?
2、分析:
A 、加法 → 1+2+4+8+16 = 31 ✅️
B、 按位与 &运算 → 结果是 0
C、 按位或 | 运算 → 结果是 31
D、 按位异或^ 运算 → 结果是 31
3、👉 B 是关键!
res = res & array[i];✨按位与的特点:要全部相同才行,最终都不相同,结果是0
4、✅答案:B
🎉 知识点总结:
🧠 数组规则
🧠 位运算技巧(异或/与/或)
🧠 判断相等的高级方法
🧠 位运算找倍数
🧠 交换变量技巧
🧠 最值算法
🧠 位运算对结果的影响