首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C- int和long具有相同的大小和最大值

C- int和long具有相同的大小和最大值
EN

Stack Overflow用户
提问于 2018-03-16 20:26:31
回答 3查看 3.1K关注 0票数 1

我想检查数据类型int、long和它们的无符号形式的大小、最大值和最小值。我的程序的输出显示int和long具有相同的大小、最大值和最小值,它们的无符号形式也是如此。下面是我的程序的输出:

代码语言:javascript
运行
复制
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

下面是我的代码:

代码语言:javascript
运行
复制
#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位计算机上运行该程序。

EN

回答 3

Stack Overflow用户

发布于 2018-03-16 20:32:59

这种关系总是成立的:

代码语言:javascript
运行
复制
short int <= int <= long int.

因此,在某些情况下,int的大小可能与long相同,而在其他情况下,int的大小可能与short相同。但是int永远不会超过long,也永远不会低于short。这就是上面的陈述(不等式)所说的。

在您的示例中,int等于long

票数 5
EN

Stack Overflow用户

发布于 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。因此,两种方案都符合这一点。

票数 1
EN

Stack Overflow用户

发布于 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的秩大于有符号字符的秩。

因此,尽管intlong类型的对象可以具有相同的表示形式和相同的值范围,但是long类型的排名高于int类型的排名。

例如,如果类型intlong具有相同的表示形式,则下面代码片段中的表达式x + y的类型将为long

代码语言:javascript
运行
复制
int x = 0;
long y = 0;

printf( "%ld\n", x + Y );

不仅intlong类型可以具有相同的表示。例如,在64位系统上,long intlong long int类型也可以重合。

例如,在www.ideone.com上运行此程序的输出

代码语言:javascript
运行
复制
#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;
} 

代码语言:javascript
运行
复制
sizeof( long int ) = 8
sizeof( long long int ) = 8
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49320769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档