一、位运算符
1、基本介绍
位运算符用来对二进制位进行操作。
2、位运算的一览图
说明:因为位运算涉及到二进制相关知识详情参考详情参考go语言使用之进制相关
3、快速入门案例
package main
import (
"fmt"
)
func main() {
fmt.Printf("1&2=%d 1|2=%d 1^2=%d\n", 1 & 2, 1 | 2, 1 ^ 2) // 0, 3, 3
//有负数参与位运算时,参考二进制,进行转补码运算.
}
二、位运算符和移位运算符
1、Golang中有3个位运算
位运算说明
分别是”按位与&、按位或|、按位异或^,它们的运算规则是:
按位与& : 两位全为1,结果为1,否则为0
按位或| : 两位有一个为1,结果为1,否则为0
按位异或 ^ : 两位一个为0,一个为1,结果为1,否则为0
2、位运算案例
比如:2&3=? -2&-3 2|3=? 2^3=?
比如:2&3=? -2&3 【位运算】
2 & 3
2 补码 0000 0010
3 补码 0000 0011
0000 0010
0000 0011
& 0000 0010 =》 这个是运算的补码结果 ====》 转成 原码 ===》 & 0000 0010
结果是 2
-2&3
-2 的补码:
-2 的原码 1000 0010
-2 的反码 1111 1101
-2 的补码 1111 1110
3 的补码 0000 0011
1111 1110
0000 0011
& 0000 0010 =>2
-2&-3
-2 的补码:
-2 的原码 1000 0010
-2 的反码 1111 1101
-2 的补码 1111 1110
-3 的补码
-3 的原码 1000 0011
-3 的反码 1111 1100
-3 的补码 1111 1101
1111 1110
1111 1101
& 1111 1100 => 补码 ==》 反码 (补码-1) 1111 1011 => 原码 1000 0100 =》-4
3、Golang中有2个移位运算符:
>>、<< 右移和左移,运算规则:
右移运算符 >>:低位溢出,符号位不变,并用符号位补溢出的高位
左移运算符 <<: 符号位不变,低位补0
4、 案例演示
a := 1 >> 2 // 0
1 的补码 0000 0001 => 0000 0000
c := -1>> 2 //-1
-1 的补码 1111 1111 => 1111 1111 (补码) ==> 1111 1110 => 1000 0001
三、其它运算符(*和&)
1、其它运算符说明
2、三元运算符的说明
在go中,没有三元运算符,使用 if – else 的结构来替代三元运算符.