c语言中int,long的取值范围是多少?为什么是这么多?(32位机)
其实这个很简单 不需要问 直接写个程序
longlongint范围 longlong型数据范围
uint i=-1;
ulong l = -1;
printf("%d %l", i, l);
看一下就知道了
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)。
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后即得有符号整数最小值。
====
[原创回答团]
C语言 关于int和long类型的范围
在32位系统上int和long的取值范围如下:
int取值范围:-2147483648 ~ 2147483647
long取值范围:-2147483648 ~ 2147483647
两者的范围是一样的,但是上面范围是vc6.0中查到的取值范围 ,C语言标准库中limits.h头文件中定义的取值范围。用户可以使用limits.h头文件中的INT_MIN、INT_MAX、LONG_MIN、LONG_MAX来查看int或者long类型的取值范围。
#include
#include
int main()
{printf("int取值范围:%d ~ %d
", INT_MIN, INT_MAX);
printf("long取值范围:%d ~ %d
", LONG_MIN, LONG_MAX);
return 0;
}
32位机器上 int类型 最小-2^7二进制补码10000000,最大2^7-1二进制01111111
long类型最小-2^15二进制补码1000,0000,0000,0000,最大2^15-1二进制0111,1111,1111,1111
你懂int类型吧,int 在内存占两个字节 ,范围是-32768~32767
而long long在内存占八个字节, 范围是-922337203685775808~922337203685775807
long long int不是所有编译器都支持的,有些支持这种数据类型的,可能是真支持,也可能是模拟支持,总之它不是标准类型。
64位长长整型,最大值为9223372036854775807
longlongint的范围-9223372036854775808~9223372036854775807。
longlongint”在C语言中是64位长整型数据类型,将变量定义为longlongint即可。intlongint、longlongint各自能够表示为int范围是-2147483648~2147483647,
longint范围是-2147483648~2147483647,
longlongint范围是-9223372036854775808~9223372036854775807。
32位的long型和int型都占四个字节,那么它们的取值范围是否一样?
32位,long,int都是四个字节,最大取值都是一样的。
我写了测试代码,用无符号型int和long分别存储-1。然后打印出来就是最大值。
#include
64位的Windows使用的是LLP64(long long and point 64)模型。参照下表:
答:32位的long型和int型都占四个字节,那么它们的取值范围是同样的。
可以用以下语句查询(需要limits.h头文件):
printf(" INT_MAX = %d
这个得看你用的是什么程序语言和什么编译器.
按你的叙述来说, 可能是C/C++在32位编译器下.
long的完整写法应该是 long int
long int和int在32位编译器下都是4字节,效果完全相同,取值范围也一样.
但在其他编译器上就可能不一样.
long int固定为32位, int根据编译器而变.
一样。
只要确认int和long都占据四个字节,那么就是一样的。你可以看看limits.h头文件中对于int和long取值范围的定义。
在codeblock中见到的limits.hint和long的取值范围如下:
#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX-1)
#define LONG_MAX 2147483647L
#define LONG_MIN (-LONG_MAX-1)
只要是32位,4个字节,那取值范围就是一样的,long和int的字节数是取决于编译器的,一般来说long是32位,int是16位。 可以在编译器里编写个小程序,输出long变量和int变量的最大值看看
一样,你可以通过定义一个数为long和int型 然后令他等于比较大到显示不了就可以测出来是一样的
一样,但是并不是所有时候int和long都是4个字节,这取决于操作系统和编译器。
取值范围是一样的 都是四个字节
至于为什么还要保留long,可能是为了兼容性吧 。
long类型与int类型的在都是占4个字节时,其取值范围一模一样
在16位编译器下不同,其它编译器下相同。 理由如下:
在C语言中,int的表示范围,是依赖于编译器的,而long int,也就是long则是固定的。
所以二者范围是否相同取决于编译器。
一、16位编译器:
1、int占2字节,取值范围为-32768~32767.
2、long 占4字节, 取值范围为-2147483648~2147483647
二者不同。
二、32位编译器及64位编译器。
int和long都占4字节, 取值范围相同, 均为-2147483648~2147483647。
此时二者相同。