为什么 int 和 C 中的 long 大小相同?
Why is int the same size as long in C?
也许更好的问题是,当我的编译器告诉我 sizeof(int)
= sizeof(long)
= 4 个字节时,long 怎么可能存储比整数更大的数字?我无法理解它……为什么不会溢出?当需要更大的数字时,是否在运行时调整?
根据this:
标准规定int
至少 16 位,long
至少是 32 位。因此,根据实现的不同,它们可能大小相同(它们可能都是 32 位),也可能大小不同。这意味着如果对这些数据类型的大小做出假设,为两种不同环境编译的同一个程序可能会有不同的行为。
why wouldn't there be an overflow? Is it adjusted during runtime when
there is a need for larger numbers?
例如,如果您将两个整数相加并将结果存储在 long
中,如果 long
与 int
的大小相同,则确实会发生溢出。这就是那些没有保证大小的类型的问题。如果您需要这样的保证,请改用 int32_t
和 int64_t
之类的类型,它们保证分别是 32 位和 64 位。
也许更好的问题是,当我的编译器告诉我 sizeof(int)
= sizeof(long)
= 4 个字节时,long 怎么可能存储比整数更大的数字?我无法理解它……为什么不会溢出?当需要更大的数字时,是否在运行时调整?
根据this:
标准规定int
至少 16 位,long
至少是 32 位。因此,根据实现的不同,它们可能大小相同(它们可能都是 32 位),也可能大小不同。这意味着如果对这些数据类型的大小做出假设,为两种不同环境编译的同一个程序可能会有不同的行为。
why wouldn't there be an overflow? Is it adjusted during runtime when there is a need for larger numbers?
例如,如果您将两个整数相加并将结果存储在 long
中,如果 long
与 int
的大小相同,则确实会发生溢出。这就是那些没有保证大小的类型的问题。如果您需要这样的保证,请改用 int32_t
和 int64_t
之类的类型,它们保证分别是 32 位和 64 位。