MST

星途 面试题库

面试题:C语言位运算在嵌入式开发中的应用

在嵌入式开发场景中,假设需要通过位运算来设置一个8位寄存器的某几位。例如,寄存器当前值为0x35(二进制00110101),现在要将第2位和第5位置1,其他位保持不变,请用C语言代码实现,并解释其中位运算的原理。
34.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

int main() {
    unsigned char reg = 0x35;  // 寄存器当前值
    unsigned char mask = (1 << 2) | (1 << 5);  // 掩码,第2位和第5位置1
    reg |= mask;  // 使用按位或运算设置指定的位

    printf("设置后的寄存器值: 0x%02x\n", reg);

    return 0;
}

位运算原理解释:

  1. 1 << 2:这是左移运算符。1的二进制是00000001,左移2位后变为00000100,即十进制的4。这个操作将1移动到了第2位的位置。
  2. 1 << 5:同样是左移运算符。1左移5位后变为00100000,即十进制的32。这个操作将1移动到了第5位的位置。
  3. (1 << 2) | (1 << 5):这是按位或运算。将上面两个结果进行按位或,0000010000100000 按位或后得到 00100100,这就是掩码mask。掩码中对应要设置的位为1,其他位为0。
  4. reg |= mask:这是复合赋值运算符,等价于reg = reg | mask。按位或运算会将reg中与mask中值为1的位对应的位置1,其他位保持不变。所以最终reg的值就实现了将第2位和第5位置1,其他位不变。