位运算符对整数在内存中的⼆进制位进⾏操作。
位运算符⽐⼀般的算术运算符速度要快,⽽且可以实现⼀些算术运算符不能实现
的功能。如果要开发⾼效率程序,位运算符是必不可少的。位运算符⽤来对⼆进
制位进⾏操作,包括:按位与(&)、按位或(|)、按位异或(^)、按位左移(<<)、按位右移(>>)。
假定 A = 60; B = 13; 其⼆进制数转换为:
A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001
Go 语⾔⽀持的位运算符如下表所示。假定 A 为60,B 为13:
| 运算符 | 描述 |
|---|---|
| & | 按位与运算符"&"是双⽬运算符。 其功能是参与运算的两数各对应的⼆进位相与。 |
| I | 按位或运算符"I"是双⽬运算符。 其功能是参与运算的两数各对应的⼆进位相或。 |
| ^ | 按位异或运算符"^"是双⽬运算符。 其功能是参与运算的两数各对应的⼆进位相异或,当两对应的⼆进位相异时,结果为1。 |
| << | 左移运算符"<<“是双⽬运算符。左移n位就是乘以2的n次⽅。 其功能把”<<“左边的运算数的各⼆进位全部左移若⼲位,由”<<"右边的数指定移动的位数,⾼位丢弃,低位补0。 |
| >> | 右移运算符">>“是双⽬运算符。右移n位就是除以2的n次⽅。 其功能是把”>>“左边的运算数的各⼆进位全部右移若⼲位,”>>"右边的数指定移动的位数。 |
- 按位与
- 按位与(&):对两个数进⾏操作,然后返回⼀个新的数,这个数的每个
位都需要两个输⼊数的同⼀位都为1 时才为1。简单说就是:同⼀位同时为1
则为1。
- 按位或
- 按位与(|):⽐较两个数,然后返回⼀个新的数,这个数的每⼀位设置1的条件是任意⼀个数的同⼀位为1 则为1。简单说就是:同⼀位其中⼀个为1则为1。
- 按位异或
- 按位异或(^):⽐较两个数,然后返回⼀个数,这个数的每个位设为1 的条件是两个输⼊数的同⼀位不同则为1,如果相同就设为0。简单说就是同⼀
位不相同则为1。
- 左移运算符(<<)
按⼆进制形式把所有的数字向左移动对应的位数,⾼位移出(舍弃),低位的空位补零。
- 语法格式:
- 需要移位的数字 << 移位的次数
- 例如: 3 << 4,则是将数字3左移4位
- 计算过程:
- 3 << 4
- ⾸先把3转换为⼆进制数字0000 0000 0000 0000 0000 0000 00000011,然后把该数字⾼位(左侧)的两个零移出,其他的数字都朝左平移4位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 00000000 0000 0000 0000 0011 0000,则转换为⼗进制是48。
- 数学意义:
- 在数字没有溢出的前提下,对于正数和负数,左移⼀位都相当于乘以2的1次⽅,左移n位就相当于乘以2的n次⽅。
- 在数字没有溢出的前提下,对于正数和负数,左移⼀位都相当于乘以2的1次⽅,左移n位就相当于乘以2的n次⽅。
- 右移运算符(>>)
按⼆进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),⾼
位的空位补符号位,即正数补零,负数补1。
- 语法格式:
- 需要移位的数字 >> 移位的次数
- 例如11 >> 2,则是将数字11右移2位
- 计算过程:
- 11的⼆进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在⾼位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010。转换为⼗进制是2。
- 数学意义:
- 右移⼀位相当于除2,右移n位相当于除以2的n次⽅。
以下实例演示了位运算符的⽤法:
- 右移⼀位相当于除2,右移n位相当于除以2的n次⽅。
package main
import "fmt"
func main() {
var a uint = 60
var b uint = 13
var c uint = 0
c = a & b
fmt.Printf("第⼀⾏ - c 的值为 %dn", c )
c = a | b
fmt.Printf("第⼆⾏ - c 的值为 %dn", c )
c = a ^ b
fmt.Printf("第三⾏ - c 的值为 %dn", c )
c = a << 2
fmt.Printf("第四⾏ - c 的值为 %dn", c )
c = a >> 2
fmt.Printf("第五⾏ - c 的值为 %dn", c )
}
以上实例运⾏结果:
第⼀⾏ - c 的值为 12 第⼆⾏ - c 的值为 61 第三⾏ - c 的值为 49 第四⾏ - c 的值为 240 第五⾏ - c 的值为 15



