代码实例
package main
func main() {
bit := 32 << (^uint(0) >> 63)
prinln(bit)
}
原理详解
-
首先是
^uint(0)
,uint
类型并不是一个固定长度的类型
-
^uint(0)
在32位系统
上返回的是0XFFFFFFFF
,也就是 232 -
^uint(0)
在64位系统
上返回的是0xFFFFFFFFFFFFFFFF
,也就是 264 -
然后
左移(<<)
和右移(>>)
运算顺序都是从左到右的,^为位反
对于32位系统:
- ^unit(0):232 − 1,(232 − 1) >> 63
- 得到0,32 << 0(也就是32左移0位), 得32
对于64位系统:
- ^unit(0):264 − 1,(264 − 1) >> 63
- 得到1,32 << 0(也就是32左移1位), 得64
网友评论