c语言中int的范围是负32767到正32767,为什么把67523赋值给int类型照样可以输出?

如题所述

这是一种过时的说法了,只有在比较古老的书上才可以看到。

对于有符号整型,也就是int型,是和编译器的字长有关的,只有在16位编译器上,int类型占2个字节,其表示范围才是-32768~32767; 对于32位和64位编译器,int类型占4字节,表示范围为-2147483648~2147483647。
以16位编译器为例,介绍其原理,对于32位和64位类似。
int为有符号整型数,在16位编译器上占2字节16位。
对于有符号数,计算机中表达时,最高位约定为符号位,当符号位为0时为正数,符号位为1时为负数。
所以真正表达值的部分是剩余的15位,这15位的范围就是二进制的000 0000 0000 0000到111 1111 1111 1111。
转换成十进制也就是0~32767。
所以,正数的表示范围就是1~32767.
其中有一个特殊的值,就是0值,对于符号位1和0的时候,值都是0,用两个形式表示同一个数无疑是浪费的,符号位为1时的全0,就用来表达-32768了,这也是负数表示的范围比正数多1的原因。

综上,对于任意位的,无论是8位,16位,32位甚至64位的整数类型表示范围的计算公式为:
如总位数为n位,那么有符号数的范围为
-2^(n-1) ~ 2^(n-1)-1
无符号数的表示范围为:
0~2^n-1
在这个公式中,^表示乘方。2^n就是2的n次幂。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-08-12
C语言中的整型变量int的范围与计算机的字长有关,书本上给出的int型变量范围只是字长为16位的微机的情况,实际上int变量的长度是当前计算机的字长,例如在win32平台上,你用VC编译时,int型变量的范围为 -2^31 ~ 2^31 - 1,也就是:[ -2147483648, 2147483647],这时赋值如果超出这个范围的话,那么结果就会出错
第2个回答  2016-08-12
那个是VB之类的范围啊,大哥,c是2^32-1, 就算是负的,那也应该是-32768才对啊
第3个回答  2016-08-12
现在int一般占4个字节,32位!
第4个回答  2016-08-12
int型数据所占字节数跟编译器有关,要具体看范围是多少。本回答被提问者采纳
相似回答