阅读642 返回首页    go 阿里云 go 技术社区[云栖]


位运算

位运算

我们先来看看位运算操作符:& (按位与)| (按位或)^ (按位异或)~ (按位取反)>> (按位右移)<< (按位左移)

 位运算符优先级比+低,注意加小括号!

 

1&(按位与) 从概念上来讲,就是将参与运算的两个分量对应的每一位来做逻辑与运算,若两者都为真(等于1),则结果才为真(等于1)。否则都为假(等于0)。

即:1 & 1 = 1 1&0 = 0 0&1 = 10&0 = 0

这里我们先来看看那一个8位二进制的例子:

7&8 = 0000 0111 & 0000 1000 = 0000 0000 = 0

7&6 = 0000 0111 & 0000 0110 = 0000 0110 = 6

2| (按位或即把参与运算的每个分量对应的每一位来做逻辑或运算,即两者都为假(为0)时,才为假(为0),否则皆为真。

即:0|0 = 01|0 = 10|1 = 11|1 = 1

来看看8位二进制的例子:

7|8 = 0000 0111 | 0000 1000 = 0000 1111 = 15

7|6 = 0000 0111 | 0000 0110 = 0000 0111 = 7

 

3^(按位异或即把参与运算的每个分量对应的每一位来做异或运算,即两者相同为假,不同为真。

即:0|0 = 0、 1|0 = 10|1 = 1、 1|1 = 0

看下面的例子:

7^8 = 0000 0111 ^ 0000 1000 = 0000 0111 = 7

7^6 = 0000 0111 ^ 0000 0100 = 0000 0011 = 3

 

4~(按位取反) 即把二进制位的每一位进行取反运算,简而言之就是1变成00变成1

直接看例子:

~7 = ~0000 0111 = 1111 1000 = 248

 

>>(按位右移)把二进制位整体向右移动。

7>>1 = 0000 0111 >> 1 = 0000 0011 = 3

7>>2 = 0000 0111 >> 2 = 0000 0001 = 1

这里右移等于除了2N次方,N为右移的位数。

 

<<(按位左移)这里就不详细说了,和右移相反。

 

位运算比乘除法效率高,所以乘以除以2时可用位操作。尽量不要对int型负数进行按位移操作。

 

 

最后更新:2017-04-03 12:55:52

  上一篇:go c++异常
  下一篇:go [C/C++基础知识] 那些被遗忘的链表知识