c语言中int,long的取值范围是多少?

如题所述

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)。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-01
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后即得有符号整数最小值。
====
[原创回答团]
第2个回答  2018-01-06
主要看编译器怎么对这些类型的数据怎么处理了,不同的编译器可能会给int分配不同的空间,一般在32位系统中会给int分配4个字节,以前的单片机编译器一般会分配1个字节,现在64位的编译器一般会分配8个字节,不同的字节,他们能表示的取值范围也就不一样了。
同样,有符号数和无符号数,表示的数据范围也不一样。比如单片机中的编译器C51,分配一个字节:
无符号数,最大也就是0XFF,即十进制的255。
有符号数,正数0~127,负数-128到-1
其它依次类推
long同样类似
第3个回答  2018-01-01
其实这个很简单 不需要问 直接写个程序
uint i=-1;
ulong l = -1;
printf("%d %l", i, l);
看一下就知道了