介绍


相信不少小伙伴在学习C语言的时候基本没有接触过位运算,但是这些运算其实非常实用,下面我就带大家看看怎么使用位运算(二进制)

位运算

位运算-与(符号&)

假设现在有两个二进制数字
0101 1100 和 0110 0110
这两个二进制数据进行“与”运算
即:0101 1100 & 0110 0110
那么就会按照对应的位置进行运算
第一位对第一位,第二位对第二位,以此类推
只有对应的位置的数都是1,该位计算的结果才会是1,所以计算的结果是
0100 0100

位运算-或(符号|)

让我们继续使用刚才举例的数字
0101 1100 和 0110 0110
这两个二进制数据进行“或”运算
即:0101 1100 | 0110 0110
只要对应的位置的数出现1,该位计算的结果才会是1,所以计算的结果是
0111 1110

位运算-异或(符号^)

对,还是使用刚才举例的数字
0101 1100 和 0110 0110
这两个二进制数据进行“异或”运算
即:0101 1100 ^ 0110 0110
只要对应的位置的数是不相同的,该位计算的结果才会是1,所以计算的结果是
0011 1010

位运算-左移(符号<<)

这里重新举例,假设我们有这样一个数字
0110 0001
然后我们对这个二进制数字进行“左移”
左移1位,即
0110 0001 << 1 结果是: 1100 0010
左移2位,即
0110 0001 << 2 结果是: 1000 0100
可以看到左移之后,抛弃了最开头的数,然后在末尾补了一个0

位运算-右移(符号>>)

继续使用刚才左移的那个例子
0110 0001
然后我们对这个二进制数字进行“右移”
右移1位,即
0110 0001 << 1 结果是: 0011 0000
右移2位,即
0110 0001 << 2 结果是: 0001 1000
可以看到右移之后,抛弃了最末尾的数,然后在开头补了一个0
(这里有个正负数的区别,如果是负数,开头补的是1)

位运算-取反(符号~)

又要重新举例,假设一个数字
1001 1110
然后我们对这个二进制数字进行“取反”
~1001 1110 结果是: 0110 0001
可以看到原本是0的位置变成了1,原本是1的位置变成了0


结尾


位运算的效率非常高,也非常好用,大家学废了吗,学废了就在评论区留言吧。