繁体   English   中英

为什么2147453647 * 2147453647的产品显示1和-2147453648 * -2147453648在以下C ++程序中显示0?

[英]Why does the product of 2147453647*2147453647 show 1 and -2147453648*-2147453648 shows 0 in the below C++ program?

我已经声明了两个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等于0x3fffffff00000001 ,其32 LSB为0x00000001 ;
  • -2147483648*-2147483648等于0x4000000000000000 ,其32 LSB为0x00000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM