代码示例uint数据类型的长度不是固定不变的,而是和平台位数相关,因此可以使用uint判断平台位数。
示例1:
func main() {
fmt.Println(32 << (^uint(0) >> 63)) // 输出32,则为32位;输出64,则为64位
}
unsafe.Sizeof()
func main() {
var a uint = 0
fmt.Println(unsafe.Sizeof(a)) // 输出4(Byte),则为32位;输出8(Byte),则为64位
}
解释
| 平台位数 | uint位数 | ^uint(0) | ^uint(0) >> 63 | 32 << (^uint(0) >> 63) |
|---|---|---|---|---|
| 32 | 32 | 2^32 - 1 | 0 | 32 |
| 64 | 64 | 2^64 - 1 | 1 | 64 |