c语言中,特别是在嵌入式的开发中,位操作是很常用的一个知识点,涉及到按位(bit)操作的地方也是很常见的。本文分享一些c语言中的位操作运算的基础内容。
1、位与操作( & ) 首先必须要区分位与(&)和逻辑与(&&),这两者之间看上去就是多一个少一个的区别,但是最终运算结果却是完全不同的。位与 & 的真值表:
从上表可以看出,位与 & 的运算原则是:只有当参与运算的两个对象都是真(true 或 1)时,得到的运算结果才是 true 或 1 ,其它的都为flase 或 0。
位与 & 其实就是把参与运算的两个数先分别转换为二进制,然后再相与得到运算之后的结果,如下:
比如:0x01 & 0x03 = 0x01 // 运算如下:0x01:0 0 0 10x03:0 0 1 1 结果: 0 0 0 1
2、位或操作 ( | ) 首先必须要区分位与(|)和逻辑与(||),这两者之间看上去就是多一个少一个的区别,但是最终运算结果却是完全不同的。位与 | 的真值表:
从上表可以看出,位与 | 的运算原则是:只要当参与运算的两个对象中有一个是真(true 或 1)时,得到的运算结果就是 true 或 1 ,只有两个都是 0 才为 flase 或 0。位与 | 其实就是把参与运算的两个数先分别转换为二进制,然后再相与得到运算之后的结果,如下:
比如:0x01 & 0x03 = 0x03 // 运算如下: 0x01:0 0 0 1 0x03:0 0 1 1结果: 0 0 1 1
3、位取反操作(~) 位取反就是把十六进制数先转换为二进制,然后把对应的位取反(1 取反变为 0,0 取反变为1)。
比如:
比如:0x01 、 0x03 // 运算如下:0x01:0 0 0 1 ~ 0x01:1 1 1 0 = 0x0d
4、位异或操作( ^ ) 位异或 ^ 的真值表:
从上表可以看出,位异或 ^ 的运算原则是:当参与运算的两个对象中有一个是真(true 或 1)时,得到的运算结果就是 true 或 1 ;如果两个都是 0 就为 flase 或 0;两个都是 1 就为 flase 或 0。
总而言之就是:相同为0,不同为1。
比如:0x01 ^ 0x03 = 0x02 // 运算如下:0x01:0 0 0 10x03:0 0 1 1结果: 0 0 1 0 5、位移操作() 位移操作中,左移几位就在右边补几个0,右移几位就在左边补几个0,超出数值范围的部分则丢弃。如下:
6、位操作的实际运用 6.1、将特定位清零 如果想要把一个特定的数的某一个位清空(置零),使用位与 & 进行操作。比如:
6.2、将特定位置 1 如果想要把一个特定的数的某一个位清空(置零),使用位与 & 进行操作。比如:
6.3、特定位取反 如果想要把一个特定的数的某一个位取反,使用异或 ^ 进行操作。比如:
注意:异或操作是相同为零,不同为1的运算原则!
6.4、获取特定二进制位 如果想要获取一个数中的某个或者某几个特定的二进制位,可以参考如下操作:
USB3.0连接器比USB2.0连接器好在哪里
红米Note7测评搭载满血骁龙660处理器支持QC4快充
LCD玻璃基板和Gorilla (R) 玻璃市场强劲,康宁宣
AMD将于AM5主板展上展示新一代AM5主板
98thCEF展商新品速递|广州贺蒲克数控设备有限公司
C语言中必须要掌握的位运算操作
OPPOA7评测 极具高贵颜值和优秀的拍照功能
如何用手电筒做收音机外接电源
Surface Pro 5曝光 或装4K屏和酷睿i7处理器 狙击iPad!
iPhone8/8Plus怎么样 值不值得买
模拟芯片市场空间有多大_PMIC主要应用及规模
CEO施侃 | 利用科技赋能,嵌入数字经济生态
小米、余承东互怼!折叠屏手机关键技术,究竟谁抄谁?
巡检机器人市场何时才能迎来爆发期?
华灿光电LED芯片亏损幅度大,去年较净利润上年同期下降471.14%
锐龙7 5800H和4800H的性能差距有多大?
杀人气囊又现身,华晨宝马躺枪中国内召回4万台
Nexperia扩展超低电容ESD保护二极管产品
POE简介
奥迪A3电动后视镜安装注意事项