代码实例
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








网友评论