+-

1 << 8 为什么不在程序中写成一个固定值,而是让计算机再次执行一次运算。这样做是因为什么?
编译器会帮你算出来的,性能上不会有区别
https://godbolt.org/
你可以在这个网站上写程序看编译结果
比如,控制单片机 IO_P2 输出高,而不影响其它引脚位:
unsigned int val = *(register_p2_addr); // 获取当前状态值
val = val | (1 << 2); // 仅修改对应第 2 位
*(register_p2_addr) = val; // 修改后的值写回
简写等价于 ==>
*(register_p2_addr) |= (1 << 2);
从上可以看出,比自己手动计算,可以很容易的找到某一位
,因此更容易书写与理解。甚至理解或封装成一种模板。
void setPinHeight(int pin_num)
{
*(register_p2_addr) |= (1 << pin_num);
}
尤其底层硬件驱动程序开发时,官方数据手册中有无数无数无数个寄存器,上面的位操作是必须要使用的。厂商的官方驱动也采用这种方式。