博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go获取操作系统位数
阅读量:4189 次
发布时间:2019-05-26

本文共 933 字,大约阅读时间需要 3 分钟。

目录


 

原理

在Go语言中,uint不是一个长度固定的类型。随着执行机器的CPU处理数据能力的差别变化而变化。我们获取uint在机器中的最大值,在32位系统中,^uint(0) = 2^{32} ,在64位系统中,^uint(0) = 2^{64}。也就是说,只要获取到uint的最大值,就可以判断出操作系统的位数了。获取uint最大值的方式有两种:

方式一:按位取反

通过位运算符^ 对unit的最小值 uint(0)取反,即可得到最大值:

max := ^uint(0)

方式二:自减表达式

通过对uint的最小值uint(0)自减1即可得到最大值:

max := uint(0)max--

💡提示:由于自减表达式无法直接参与运算,因此不建议使用。

 

虽然拿到uint的最大数后可以判断出操作系统的位数,可是这样庞大的数据使结果并不直观。以64位操作系统为例,uint的最大值为18446744073709551615。这个数据显然不能直接看出执行机器的位数,我们需要进一步处理,让结果看起来不那么晦涩难懂。

 

根据上面介绍的知识,我们可以对uint的最大值除以2^{63}。如果结果为0,表示操作系统位数是32,否则操作系统是64位。

如果希望更加直观,可以在继续运算:使用32 * 2^{x}来最终明确的表示操作系统位数,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 \cdot 2^{b},a >> b 相当于 a \cdot \frac{1}{2^{b}}

 

懒人调用

直接调用标准库常量strconv.IntSize即可获取操作系统位数:

func size() int {	return strconv.IntSize}

 

转载地址:http://vdsoi.baihongyu.com/

你可能感兴趣的文章
.NET Interop: 从IErrorInfo错误对象获得托管代码的异常信息
查看>>
Microsoft Silverlight正式发布
查看>>
国际化编程中Locale相关概念的一些解释
查看>>
PIA (Primary Interop Assembly) & AIA (Alternate Interop Assembly)简介
查看>>
“妖精”团队———阿里巴巴
查看>>
迟到的感谢——2006最有价值博客的候选人(& 个人回顾)
查看>>
第29回 软件质量度量
查看>>
IT 2007预言
查看>>
怎样让.Net2.0的Membership使用已存在的Sql Server2000/2005数据库
查看>>
ASP.NET2.0 文本编辑器FCKeditor使用方法详解
查看>>
常见的 Web 项目转换问题及解决方案
查看>>
VS2005中使用ClickOnce 部署应用程序的升级
查看>>
Visual Studio2005下配置及运行NUnit
查看>>
.Net Remoting配置文件的用法
查看>>
Tomcat性能调整优化
查看>>
利用SQL Server 2005减轻生产服务器优化负荷
查看>>
优化MYSQL服务器
查看>>
Exchange磁盘性能优化
查看>>
Apusic应用服务器的性能调节_JVM优化
查看>>
Apache重负荷服务器应如何优化?
查看>>