也许更好的问题是,当我的编译器告诉我sizeof(int)
= sizeof(long)
= 4个字节时,long可能存储比整数大的数字吗?我不能把头缠起来...为什么不会溢出?需要更大数量时是否在运行时进行了调整?
答案 0 :(得分:2)
根据this:
标准规定int
至少为 16位,而long
至少为32位。因此,根据实现的不同,它们的大小可能相同(它们都可以是32位),或者大小也可能不同。这意味着,如果为这些数据类型的大小做出假设,则为两个不同环境编译的同一程序可能会表现出不同的行为。
为什么不会出现溢出?在运行时是否进行了调整? 是否需要更大的数量?
例如,如果您添加两个整数并将结果存储在long
中,则如果long
与int
的大小相同,则确实可能会发生溢出。这是那些类型没有保证大小的问题。如果需要这种保证,请改用int32_t
和int64_t
之类的类型,这些类型分别保证为32位和64位。