我想检查数据类型int、long和它们的无符号形式的大小、最大值和最小值。我的程序的输出显示int和long具有相同的大小、最大值和最小值,它们的无符号形式也是如此。下面是我的程序的输出:
Size of int : 4 byte, Max value : 2147483647, Min value : -2147483648
Size of long : 4 byte, Max value : 2147483647, Min value : -2147483648
Size of unsigned int : 4 byte, Max value : 4294967295, Min value : 0
Size of unsigned long : 4 byte, Max value : 4294967295, Min value : 0
下面是我的代码:
#include <stdio.h>
#include <limits.h>
int main(int argc, char *argv[])
{
printf("Size of int : %ld byte, Max value : %d, Min value : %d\n", sizeof(int), INT_MAX, INT_MIN);
printf("Size of long : %ld byte, Max value : %d, Min value : %d\n", sizeof(long), LONG_MAX, LONG_MIN);
printf("\n");
printf("Size of unsigned int : %ld byte, Max value : %u, Min value : %d\n", sizeof(unsigned int), UINT_MAX, 0);
printf("Size of unsigned long : %ld byte, Max value : %lu, Min value : %d\n", sizeof(unsigned long), ULONG_MAX, 0);
return 0;
}
我的问题是,int和long具有相同的大小、最大值和最小值,这是正常的吗?我使用gcc version 5.1.0 (tdm64-1)
编译器在Windows1064位计算机上运行该程序。
发布于 2018-03-16 20:32:59
这种关系总是成立的:
short int <= int <= long int.
因此,在某些情况下,int
的大小可能与long
相同,而在其他情况下,int
的大小可能与short
相同。但是int
永远不会超过long
,也永远不会低于short
。这就是上面的陈述(不等式)所说的。
在您的示例中,int
等于long
。
发布于 2018-03-16 20:29:16
是的,这是非常正常的。具有32位int
和32位long
的体系结构,64位指针被称为LLP64数据模型,并受到视窗系统的青睐(尽管Intel CPU本身内部使用48位指针)。
( 64位Linux架构使用具有32位int
、64位long
和64位指针的LP64数据模型。)
C标准规定,int
的最小范围是-32767到+32767,long
的最小范围是-2147483647到+2147483647。因此,两种方案都符合这一点。
发布于 2018-03-16 20:52:15
来自C标准(6.2.5类型)
8对于具有相同符号和不同整数转换秩的任意两个整数类型(参见6.3.1.1),具有较小整数转换秩的类型的值范围是另一种类型的值的子范围。
因此,所需要的就是int
类型的值范围不会大于long类型的值范围。
And (6.3.1.1布尔值、字符和整数)
1每种整数类型都有一个整数转换等级,定义如下:
- long long int的秩大于long int的秩,long int的秩大于int的秩,short int的秩大于有符号字符的秩。
因此,尽管int
和long
类型的对象可以具有相同的表示形式和相同的值范围,但是long
类型的排名高于int
类型的排名。
例如,如果类型int
和long
具有相同的表示形式,则下面代码片段中的表达式x + y
的类型将为long
。
int x = 0;
long y = 0;
printf( "%ld\n", x + Y );
不仅int
和long
类型可以具有相同的表示。例如,在64位系统上,long int
和long long int
类型也可以重合。
例如,在www.ideone.com上运行此程序的输出
#include <stdio.h>
int main(void)
{
printf( "sizeof( long int ) = %zu\n", sizeof( long int ) );
printf( "sizeof( long long int ) = %zu\n", sizeof( long long int ) );
return 0;
}
是
sizeof( long int ) = 8
sizeof( long long int ) = 8
https://stackoverflow.com/questions/49320769
复制相似问题