为什么在下面的C ++程序中2147453647 * 2147453647的乘积显示为1,而-2147453648 * -2147453648的乘积显示为0?

用户名

我已经声明了两个int变量:(n1=2147483647我的编译器的最大值)和n2=-2147453648(最小值)。的结果n1*n1n2*n2有着惊人的1和0。

为什么要这些值?如果它与数据类型的范围有关,那么它可以不是任何值,还是int可以容纳的最大值?

int main()
{
    int n1 = 2147483647;
    cout << "Product is : " << n1 * n1 << endl;

    int n2 = -2147483648;
    cout << "Product is : " << n2 * n2 << endl;

    return 0;
}
名称

有符号整数溢出是未定义的行为(参考)。

现在,如果您想知道这些特定值如何在您的特定环境中出现,它们就是结果的32个最低有效位(LSB):

  • 2147483647*2147483647等于0x3fffffff0000000132个LSB 0x00000001;
  • -2147483648*-2147483648等于0x400000000000000032的LSB为0x00000000

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章