嵌入式笔试刷题第(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 内核、以及实用电路知识等内容。