Go | 检测当前系统位数
2024-03-09
声明一个常量来表示当前操作系统的位数
const NativeWordBits = 32 << (^uint(0) >> 63) // 64 or 32
^uint(0)
:对于无符号整型 uint(0)(其所有位都是0),按位取反操作会产生一个所有位都是1的数字。这个结果的数值上等同于 uint 能表示的最大值。>> 63
:这个操作的结果依赖于 uint 的大小:- 在64位平台上,uint 类型为64位,
^uint(0)
产生一个所有位都为1的64位数字。向右移动63位后,最左边的一位(最高位)会移动到最右边,结果为1(二进制的000...001) - 在32位平台上,尽管仍然执行相同的操作,但是由于 uint 的大小只有32位,所以这个操作实际上产生的结果是 0,因为32位无法表示一个向右移动了63位的值
- 在64位平台上,uint 类型为64位,
32 << (... >> 63)
:最终这个表达式将32左移上一步的结果。在32位平台上,由于上一步的结果是 0,32 << 0
保持不变,仍然是 32。这反映了32位系统的字长。在64位平台上,上一步的结果是 1,因此32 << 1
相当于将32乘以2,结果是 64。这反映了64位系统的字长。
检查当前操作系统是32位的还是64位的
const Is64bitOS = ^uint(0) >> 63 != 0
const Is32bitOS = ^uint(0) >> 32 == 0
- Go101