提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
C语言中提供了6中基本位运算符。位运算是对每个二进制位分别进行操作;位运算符的操作对象只能是整型或字符型数据,不能为实数型数据(C语言中,实数型数据只能用十进制表示,当然不能进行位运算)。
一、位运算符表格
运算符 | 名称 | 实例 | 结果 |
---|---|---|---|
~ | 换位取反 | ~1010 | 0101 |
& | 换位与 | 0110&1010 | 0010 |
| | 按位或 | 0110|1010 | 1110 |
^ | 按位异或 | 0110^1010 | 1100 |
<< | 按位左移 | 01101010<<2 | 10101000 |
>> | 按位右移 | 01101010>>2 | 00011010 |
二、位运算符详解
1.按位取反 ~
规则:将操作对象的二进制补码中的每一位安危取反,即1变0,0变1。
举例:
~101010011
——————————————————
010101100
—————————————————————————————————
2.按位与 &
规则:两个操作数二进制补码的每一个对应位都为1时结果为1,其他情况时为0。(即只要有一个为0结果就为0)
举例:
11000011
&10100110
——————————————————————
10000010
- 按位或 |
规则:两个操作数二进制补码的每一个对应位都为0时结果为0,其他情况时为1。(即只要有一个为1结果就为1)
举例:
11000011
&10100110
——————————————————————
11100111
4.按位异或 ^
规则:两个操作数二进制补码的每一个对应位不同时结果为1,相同时为0。(异或异或着重点在异)
举例:
11000011
&10100110
——————————————————————
01100101
5.按位左移 <<
规则:将操作数的二进制补码向左移动指定的位数,并且将高位舍弃,在低位补0。(左移即将最左边的n位舍弃,在最右边补n个0)
1 0 1 0 0 1 1 0<<2
_____________________
1 0 0 1 1 0 0 0
左移n位相当于该数乘以2n,前提是该数在舍弃的高位中不包含1的情况。
6.按位右移 >>
规则:将操作数的二进制补码向右移动指定的位数,并且将低位舍弃,在高位补0。(右移对于无符号数而言:即将最右边的n位舍弃,在最左边补n个0)
1 0 1 0 0 1 1 0>>2
_____________________
0 0 1 0 1 0 0 1
三.位运算符的一些应用
1.确定某个操作数的二进制补码中的最低位
方法:
-
将这个操作数与1进行&操作
原理:1&1=1 0&1=0
即不论是1还是0,与1进行&操作后都能得到原来的值,进而可以确认。
2. 将这个操作数与0进行|操作
原理:
1|0=1
0|0=0
即不论是1还是0,与0进行 | 操作后都能得到原来的值,进而可以确认。
2.确定某个操作数二进制补码中1的个数
1.第一种:结合&操作符和>>操作符。
解释:因为操作数的二进制数补码中的最低位与1进行&操作后就能知道这个最低位是1还是0,故只要将操作数右移,然后操作数和1进行与操作&#