【问题标题】:Why is int the same size as long in C? [duplicate]为什么 int 与 C 中的 long 大小相同? [复制]
【发布时间】:2019-05-15 14:36:44
【问题描述】:

也许更好的问题是,当我的编译器告诉我 sizeof(int) = sizeof(long) = 4 字节时,long 怎么可能存储比整数更大的数字?我无法绕过它......为什么不会溢出?当需要更大的数字时,它是否会在运行时进行调整?

【问题讨论】:

  • 在C中,intlong等类型的大小在不同的系统上可以不同。如果intlong 在您的系统上具有相同的位数,那么long 不能存储比int 更大的数字。
  • 对于 C99(及更高版本),您可以尝试 long long<stdint.h> types: int_least32_t, int_least64_t
  • 问题是您假设long 可以存储比int 更大的数字。情况不一定如此。

标签: c int long-integer


【解决方案1】:

根据this

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

为什么不会溢出?是否在运行时调整 需要更大的数字吗?

例如,如果您将两个整数相加并将结果存储在long 中,如果long 的大小与int 的大小相同,则确实可能发生溢出。这就是那些没有保证大小的类型的问题。如果您需要这样的保证,请改用 int32_tint64_t 之类的类型,它们分别保证为 32 位和 64 位。

【讨论】:

    猜你喜欢
    • 2017-06-01
    • 2021-06-25
    • 2020-04-11
    • 2022-01-21
    • 2016-04-15
    • 2011-05-08
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多