嵌入式笔试刷题(第13天)
1. 表达式 (^A)||(^B)
等效表达式
逻辑表达式中,^ 是按位异或。假设 ^A
表示“非A”是错误的,正确语法是逻辑非 !A
,但此题应理解为异或。
表达式 (^A)||(^B)
不太符合常规写法,合理理解为:
若表达式是 !A || !B
,等价于 !(A && B)
(德摩根定律)
✅ 所以答案应是:A. ^(A && B)
2. 宏展开与副作用
#define MAX(a,b) ((a)>(b)? (a) : (b)) int x=5, y=8, z=10; z = MAX(x++, y++);
宏展开:
z = ((x++) > (y++) ? (x++) : (y++));
- 如果
x=5
,y=8
,则x++
= 5,y++
= 8 → 5 > 8 → false → 执行 y++,y=9, z=8 - 实际上两次 y++ 被执行,y=10
最终:x=6, y=10, z=10
✅ 正确答案:D. x=6, y=10, z=10
3. 数组越界访问
int a[5], i; for(i=1; i<=5; i++) { a[i] = 0; }
数组下标范围应是 0~4
,这里 a[5]
越界但循环执行了 5次,即 i=1
到 i=5
✅ 正确答案:A. 6(包括数组下标非法的1次)
4. 带位字段的结构体大小
struct MStar { char STB:1; cha
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式笔试专栏 文章被收录于专栏
本专栏系统整理了嵌入式方向笔试中常见的知识点和高频考题,涵盖基础理论、常用算法、C语言陷阱、操作系统原理、驱动开发、常见外设通信协议(如 I2C/SPI/UART)、RTOS、Linux 内核、以及实用电路知识等内容。