回 帖 发 新 帖 刷新版面

主题:[讨论]菜鸟求助,int数据类型的宽度问题

很久没有写过C代码了,今天写了一下,胡乱间吓我一跳:

我首用的是VC6的APPWizard建了一个基于对话框的应用程序框架,然后在里面写了两行很弱智的代码

int i=32768;
MessageBox("%d",i);

结果显示的是32768,居然没发生溢出。我再把32768改成2147483648时,才发生溢出。
用2147483647不会发生溢出。

我跑去查了一下N年前我的学习笔记:

               ANSI标准定义的数据类型
int                  16比特                 -32767 到 3267
long int             32比特            -2147483647 到 2147483647


问题:为什么现在的int类型数据宽度变成了原来的long型的宽度?
是与计算机硬件的问题,还是操作系统的问题,还是编译程序的问题?或是其它???

恳请高手们不吝赐教,不胜感谢

回复列表 (共3个回复)

沙发

int 32位,如果超过signed int(-2^31 ~ 2^31 - 1)定义范围,自动调整为unsigned int(0 ~ 2^32 - 1) (32)位。如果仍然超出范围,溢出。

板凳

教科书上int确实是16位,只不过硬件、系统、编译器不同int的长度是不同的。

另外,我不赞同2楼对溢出的说法,根据你的说法2147483648会原样输出了?溢出的结果是取其补码换算出来的,而不是自动调整,溢出仍然要溢出。

3 楼

int一般默认是有符号的,前者不指溢出。

我来回复

您尚未登录,请登录后再回复。点此登录或注册