【问题标题】:why is the garbage value for an integer so un-integerly huge [duplicate]为什么整数的垃圾值如此巨大[重复]
【发布时间】:2017-11-27 23:36:41
【问题描述】:

今天在尝试使用 C++ 程序时,我尝试使用读取的代码从垃圾值中获取随机变量

int main(){
    int x,r;
    r = x%7
    cout << r;
}

不用说这种方法不起作用,因为 x 在没有初始化的情况下被使用,但是当我查看变量 watch 时,我看到 x 的垃圾值是 -846.... 和 r 的值相同。这让我很困惑,一个整数怎么能保存如此巨大的垃圾值。通常 C++ 整数是±32676,但是我看到的疯狂的 7+ 数字值从未在这个范围内。如果整数只能包含很小的值,那么这个非常大的值可能是什么原因

【问题讨论】:

  • 不,sizeofint 是特定于实现的。在 Linux/x86 系统(32 位和 64 位)上,它是 4 个字节,所以是 32 位。今天只有很少的系统有 16 位 int(主要是嵌入式的东西 à la Arduino...)
  • @Serge:你确定吗?它取决于 C++ 标准
  • “为什么一个整数的垃圾值这么大” - 它可能很小或很大,32 位或 64 位或猪可能会飞。要点是;它是 undefined - 你不能使用/阅读它并且 if 你这样做了,那么你的整个程序是未定义的。
  • @Serge 不,int 的大小取决于实现。 16 位在 16 位系统上非常典型。
  • @Serge 有很多平台,int has 16, 18, 24, 36 bits... 唯一的要求是INT_MAX must be at least 32767

标签: c++


【解决方案1】:

在您可能使用的大多数架构上,整数通常至少为 32 位。 所以可以容纳大约 +/-20 亿

【讨论】:

    【解决方案2】:

    根据this answer,整数的最小值(强调我的)范围是-32,767 到32,767。实际限制由实现定义,最有可能从 -20 亿到正 20 亿。

    要检查设备上的整数限制,您可以使用标题 &lt;limits&gt;,如下所示:

    int imin = std::numeric_limits<int>::min(); // minimum value
    int imax = std::numeric_limits<int>::max(); //or INT_MAX
    

    【讨论】:

      【解决方案3】:

      在大多数操作系统(平台)上,整数大小通常为 4 个字节。因此,在最低的 32 位架构中,它可以保存从 (-2147483648) 到 (+2147483648) 的值。 如果您使用的是 64 位架构,这是当今常见的架构,您可以保存从 (-2^64 / 2) 到 (+2^64 / 2) 的值。

      看看这个显示不同平台上整数大小的链接:http://ivbel.blogspot.co.il/2012/02/size-of-primitive-types-in-c-language.html

      【讨论】:

      • 即使是大多数 64 位架构 int 也是 32 位类型。
      【解决方案4】:

      通常 C++ 整数为 ±32676

      这在大多数系统上都是错误的(除了像Arduino 这样的嵌入式事物)。在大多数当前的 C++ 系统上,int 使用 32 位。 IIRC 标准要求至少 16 位。

      您应该使用&lt;limits&gt; 标准C++11(或更好的)标头。

      顺便说一句,您的程序是 undefined behaviour 的典型示例,因此您需要是 very scared(并且您不应该期望任何特定的具体行为)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-04
        • 2021-10-06
        • 2014-06-06
        • 1970-01-01
        • 2021-10-24
        • 2016-03-02
        • 2020-12-17
        • 1970-01-01
        相关资源
        最近更新 更多