c语言中int,long的取值范围是多少?为什么是这么多?(32位机)

如题所述

int和long作为基本的整数类型,取值范围和位数直接相关。如果是n位整数的话,最高位表示符号位,剩下的n-1位以补码形式表示绝对值,因此范围是整数区间[-2^(n-1),2^(n-1))。
int和long并没有明确位数,具体和平台相关(有一点可以确定,sizeof(int)<=sizeof(long))。一般而言,32位机的int是32位的,于是范围是[-2^31, 2^31)也就是[-2147483648, -2147483648)。而非int的位数取决于机器字长外还决定于软件平台(操作系统、编译器)上实现的特定的C语言数据模型(专指整数数据模型,不是数据库里讨论的那个),只是一般32位平台上的long都比较统一(基本上都是LP32),为32位,范围和int一致。(如果是64位平台,除了Windows上的LLP64模型中long是32位外,LP64、ILP64、SILP64的long都是64位)。
另外LS错误。首先用的无符号整数写法是错误的,其次printf使用不当(应该用字长无关的%i保证结果正确),再次结果意义不明确。
unsigned int i= -1;
unsigned long l = -1;
printf("%i %i", i, l);
-1转换为无符号数后表示负数的符号位“1”被作为最高非符号位,输出的是无符号整数的最大值。
printf("%i %i", i >> 1, l >> 1);
输出有符号整数最大值,该值加1再乘以-1后即得有符号整数最小值。
====
[原创回答团]

参考资料:原创 + Google确认

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-28
其实这个很简单 不需要问 直接写个程序
uint i=-1;
ulong l = -1;
printf("%d %l", i, l);
看一下就知道了
第2个回答  2018-04-11

Int 的 范围:-2147483648 ~ 2147483647。
Long 的 范围:-9223372036854775808 ~ 9223372036854775807public class Test。

System.out.println("Int 的 范围:"+Integer.MIN_VALUE+" ~ "+Integer.MAX_VALUE)。
System.out.println("Long 的 范围:"+Long.MIN_VALUE+" ~ "+Long.MAX_VALUE)。

本回答被网友采纳
相似回答