`
阿尔萨斯
  • 浏览: 4148396 次
社区版块
存档分类
最新评论

溢出! C++ int在32、64的怪现象

 
阅读更多
溢出! C++ int在32、64的怪现象
前奏不多说了,就是看到64位windows7的系统下,int最长为32位,-2^31~2^31。于是决定用我的32的本来试
一试
在32环境下的Int长度。

测试环境:
图片
我的RAM的2G的,所以用32。请不要吐槽的我的8.1Preview的IE11return of START。。。。
对了,我的编译器是VS2012。
代码:
图片
结果:
图片
我很奇怪,在32位的系统下得到的最大结果和64位系统下得到的最大结果是一样的。同为
-2^31~2^31,长度为32位。
通过查找:

Int16 值类型表示值介于 -32768 到 +32767 之间的有符号整数。

Int32 值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数。

Int64 值类型表示值介于 -9,223,372,036,854,775,808 到 +9,223,372,036,854,775,807 之间的整数。
然而Int的存储空间是确定的,
-2,147,483,648 到 2,147,483,647,即有符号位的32位长度。因此,我们在int
64存入int 时候,存储空间不足,导致溢出,这就说明了为什么32和64下的int为什么是一样的。在C++中,
int64直接存入long long就可以了。

补充说明下64位系统:
我简单理解的是,64位OS的数据最长为64位长度,因此在处理内存、数据的时候就会支撑更大的RAM。由于
我们的CPU很早很早就是64位的架构了,但是RAM一直达到64位长度的存储空间(可以算一下,大概在3.7几
G左右)。随着RAM增大,64的OS出现了,随之而来的应该就是64的软件应用。很多兄弟安装了64位的系统,
64的RAM要比32的大,可调用的内存会更多。实际上真正的64的软件并不多,更多的是64的驱动。可以对比
一下,我认为在CPU单主频上不去的时候,64比32更长一位,浮点运算的时间会更长。所以可能64的软件
行起来会更慢。

顺便抱怨一下这种莫名其妙的数据长度的问题,不知道在移植的过程中会出现多少问题。没有那么多限制的话
,仿真算法什么的多用一下double没啥坏处。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics