为什么int与C中的long大小相同?

为什么int与C中的long大小相同?,c,int,long-integer,C,Int,Long Integer,也许更好的问题是,当我的编译器告诉我sizeof(int)=sizeof(long)=4字节时,long怎么可能存储比整数大的数字呢?我不能把我的头绕在它周围…为什么不会有溢出?当需要更大的数值时,是否在运行期间进行调整?根据: 标准要求int至少为16位,long至少为32位。因此,根据实现的不同,它们可能大小相同(可能都是32位),也可能大小不同。这意味着,如果为两个不同的环境编译的同一个程序对这些数据类型的大小做出假设,那么它的行为可能会有所不同 为什么不会出现溢流?当 是否需要更大的数字

也许更好的问题是,当我的编译器告诉我
sizeof(int)
=
sizeof(long)
=4字节时,long怎么可能存储比整数大的数字呢?我不能把我的头绕在它周围…为什么不会有溢出?当需要更大的数值时,是否在运行期间进行调整?

根据:

标准要求
int
至少为16位,
long
至少为32位。因此,根据实现的不同,它们可能大小相同(可能都是32位),也可能大小不同。这意味着,如果为两个不同的环境编译的同一个程序对这些数据类型的大小做出假设,那么它的行为可能会有所不同

为什么不会出现溢流?当 是否需要更大的数字


例如,如果添加两个整数并将结果存储在
long
中,如果
long
int
大小相同,则确实可能会出现溢出。这就是那些没有保证大小的类型的问题。如果您需要这样的保证,请使用
int32\u t
int64\u t
等类型,它们分别保证为32位和64位。

在C中,不同系统上的
int
long
等类型的大小可能不同。如果
int
long
在您的系统上具有相同的位数,那么
long
不能存储比
int
更大的数字。对于C99(及更高版本),您可以尝试
long
或:
int\u least32\u t
int至少64\t
问题在于您假设
long
可以存储比
int
更大的数字。情况未必如此。