嵌入式笔试刷题第(25天)
第1题:按位翻转一个 unsigned char 数值
写一个函数,把
unsigned char num的位进行整体翻转,不使用额外变量。
示例:
输入:num = 0b10010111 输出:num = 0b11101001
解法(最优):使用位运算 + 掩码 + 位移
unsigned char reverseBits(unsigned char num) {
num = (num & 0xF0) >> 4 | (num & 0x0F) << 4;
num = (num & 0xCC) >> 2 | (num & 0x33) << 2;
num = (num & 0xAA) >> 1 | (num & 0x55) << 1;
return num;
}
解析:逐层交换半字节、2位、1位,利用位运算达到最优翻转,不使用额外变量。
第2题:判断字符串中括号是否匹配(非递归)
输入示例:({})[] → 匹配
解法:使用栈结构
#include <stdio.h>
#include <string.h>
int isValid(char *str) {
char stack[100];
int top = -1;
for (int i = 0; str[i]; i++) {
char c = str[i];
if (c == '(' || c == '{' || c == '[')
stack[++top] = c;
else if (c == ')' && top >= 0 && stack[top] == '(')
top--;
else if (c == '}' && top >= 0 && stack[top] == '{')
top--;
else if (c == ']' && top >= 0 && stack[top] == '[')
top--;
else
return 0;
}
return top == -1;
}
第3题:实现循环缓冲区的 Write 函数
结构定义:
typedef struct RingBuf {
char *Buf;
unsigned int Size;
unsigned int RId;
unsigned int WId;
} RingBuf;
解法:
void Write(RingBuf *ringBuf, char ch) {
ringBuf->Buf[ringBuf->WId] = ch;
ringBuf->WId
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式笔试专栏 文章被收录于专栏
本专栏系统整理了嵌入式方向笔试中常见的知识点和高频考题,涵盖基础理论、常用算法、C语言陷阱、操作系统原理、驱动开发、常见外设通信协议(如 I2C/SPI/UART)、RTOS、Linux 内核、以及实用电路知识等内容。
查看3道真题和解析