为什么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
更大的数字。情况未必如此。