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位的值
32 << (... >> 63):最终这个表达式将32左移上一步的结果。在32位平台上,由于上一步的结果是 0,32 << 0 保持不变,仍然是 32。这反映了32位系统的字长。在64位平台上,上一步的结果是 1,因此 32 << 1 相当于将32乘以2,结果是 64。这反映了64位系统的字长。
const Is64bitOS = ^uint(0) >> 63 != 0
const Is32bitOS = ^uint(0) >> 32 == 0