文章参考微信公众号[嵌入式软件学习圈]
二、位操作
2.1 ~(0u)是全1;
2.2 位与& 位或 | 位取反~ 位异或^
2.3、位与、位或、位异或的特点总结:
位与:(任何数,其实就是1或者0)与1位与无变化,与0位与变成0
位或:(任何数,其实就是1或者0)与1位或变成1,与0位或无变化
位异或:(任何数,其实就是1或者0)与1位异或会取反,与0位异或无变化
2.4、左移位<< 与右移位>>
C语言的移位要取决于数据类型。
对于无符号数,左移时右侧补0(相当于逻辑移位)
对于无符号数,右移时左侧补0(相当于逻辑移位)
对于有符号数,左移时右侧补0(叫算术移位,相当于逻辑移位)
对于有符号数,右移时左侧补符号位(如果正数就补0,负数就补1,叫算术移位)
2.5、小记:常与 1 拿来 做位运算。让他取反、移位 得到想要的数。
2.6、直接用宏来置位、复位(最右边为第1位)。 置位置1,复位置0 ;
define SET_NTH_BIT(x, n) (x | ((1U)<<(n-1)))
define CLEAR_NTH_BIT(x, n) (x & ~((1U)<<(n-1)))
往期热文:
基础C语言知识串串香(1)
===========我是华丽的分割线===========
更多知识:
点击关注专题:嵌入式Linux&ARM
或浏览器打开:https://www.jianshu.com/c/42d33cadb1c1
或扫描二维码: