Go语言:判断操作系统位数

代码实例:


package main

func main() {
    bit := 32 << (^uint(0) >> 63)
    println(bit)
}

原理详解:


  • 首先 uint 类型 不是一个固定长度的类型

  • 所以对无符号的 uint(0) 取反将得到最大值

  • ^uint(0)32位系统 上返回的是 0xFFFFFFFF,也就是 232

  • ^uint(0)64位系统 上返回的是 0xFFFFFFFFFFFFFFFF,也就是 264

  • 然后 左移(<<)右移(>>) 运算顺序都是从左到右的,^为位反

对于32位系统:
  • ^unit(0):232 − 1
  • (232 − 1) >> 63,得到0
  • 32 << 0,等于 32
对于64位系统:
  • ^unit(0):264 − 1
  • (264 − 1) >> 63,得到1
  • 32 << 1,等于 64

你可能感兴趣的:(Go语言:判断操作系统位数)