本文共 933 字,大约阅读时间需要 3 分钟。
目录
在Go语言中,uint不是一个长度固定的类型。随着执行机器的CPU处理数据能力的差别变化而变化。我们获取uint在机器中的最大值,在32位系统中,^uint(0) = ,在64位系统中,^uint(0) = 。也就是说,只要获取到uint的最大值,就可以判断出操作系统的位数了。获取uint最大值的方式有两种:
方式一:按位取反
通过位运算符^ 对unit的最小值 uint(0)取反,即可得到最大值:
max := ^uint(0)
方式二:自减表达式
通过对uint的最小值uint(0)自减1即可得到最大值:
max := uint(0)max--
💡提示:由于自减表达式无法直接参与运算,因此不建议使用。
虽然拿到uint的最大数后可以判断出操作系统的位数,可是这样庞大的数据使结果并不直观。以64位操作系统为例,uint的最大值为18446744073709551615。这个数据显然不能直接看出执行机器的位数,我们需要进一步处理,让结果看起来不那么晦涩难懂。
根据上面介绍的知识,我们可以对uint的最大值除以。如果结果为0,表示操作系统位数是32,否则操作系统是64位。
如果希望更加直观,可以在继续运算:使用32 * 来最终明确的表示操作系统位数,x表示上一步骤相除后的结果。这样,32位操作系统得到的计算结果为32,64位操作系统得到的计算结果为64。
func size() int { max := uint(0) max-- result := 32 * math.Pow(2.0, float64(max / uint(math.Pow(2.0, 64.0)))) return int(result)}
使用位运算符可以代替繁琐的求平方运算:
func size() int { return 32 << (^uint(0) >> 63)}
💡提示:位运算符补充:a << b 相当于 ,a >> b 相当于 。
直接调用标准库常量strconv.IntSize即可获取操作系统位数:
func size() int { return strconv.IntSize}
转载地址:http://vdsoi.baihongyu.com/