问答

关于C语言 1 << 8 的疑惑

作者:admin 2021-04-20 我要评论

1 8 为什么不在程序中写成一个固定值,而是让计算机再次执行一次运算。这样做是因为什么? ### 可以理解为一种模板,主要为了便于书写、阅读与理解; 在嵌入式开...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

1 << 8 为什么不在程序中写成一个固定值,而是让计算机再次执行一次运算。这样做是因为什么?

###
  • 可以理解为一种模板,主要为了便于书写、阅读与理解;
  • 在嵌入式开发中常用,在涉及硬件操作的库中常见(C\C++)。

比如,控制单片机 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);  
}

尤其底层硬件驱动程序开发时,官方数据手册中有无数无数无数个寄存器,上面的位操作是必须要使用的。厂商的官方驱动也采用这种方式。

###

编译器会帮你算出来的,性能上不会有区别
image.png
https://godbolt.org/
你可以在这个网站上写程序看编译结果

###

算出来的想法是不可取,这需要编程人员做额外的运算,增加了编程的负担。之所以这么写,是因为移位运算对计算机来说算起来十分方便,可以迅速得到结果。从某种程度上讲,计算机做移位运算比做加减乘除快的多。所以这提高了编程效率。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器