- 位运算思考题
func main() {
var a int = 1 >> 2 //位右移
var b int = -1 >> 2
var c int = 1 << 2 //位左移
var d int = -1 << 2
//a,b,c,d 结果是多少
fmt.Println("a=", a)
fmt.Println("b=", b)
fmt.Println("c=", c)
fmt.Println("d=", d)
}
func main() {
fmt.Println(2&3) //位与
fmt.Println(2|3) //位或
fmt.Println(13&7)
fmt.Println(5|4) //?
fmt.Println(-3^3) //?//位异或
}
原码、反码、补码
对于有符号的数而言:
1、二进制的最高位是符号位:0
表示正数,1
表示负数;
示例
1
和-1
的byte
(8位)类型在内存中表示为:1 ==> [0000 0001] -1 ==> [1000 0001]
2、正数的原码,反码,补码都一样;
3、负数的反码 = 它的原码符号位不变,其它位取反
(0->1 1->0
)
4、负数的补码 = 反码 + 1
1 ==> 原码 [0000 0001] 反码 [0000 0001] 补码 [0000 0001]
-1 ==> 原码 [1000 0001] 反码 [1111 1110] 补码 [1111 1111]
5、0的反码,补码都是0
6、在计算机运算的时候,都是以补码的方式运算的
只有
+
没有-
1-1 = 1 + (-1)
位运算符和移位运算符
- Golang 中有3 个位运算
分别是按位与&
、按位或|
、按位异或^
,它们的运算规则是:
按位与&
: 两位全为1,结果为1,否则为0
按位或|
: 两位有一个为1,结果为1,否则为0
按位异或^
: 两位一个为0,一个为1,结果为1,否则为0
- 案例练习
比如:2&3=? 2|3=? 2^3=?
有疑问加站长微信联系(非本文作者)