gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:49:54 26 4
gpt4 key购买 nike

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

为什么要有这些值(value)观?如果是和数据类型的范围有关,那会不会是任意值,或者int能容纳的最大值?

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

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

return 0;
}

最佳答案

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

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

  • 2147483647*2147483647等于0x3fffffff00000001,低32位为0x00000001
  • -2147483648*-2147483648 等于 0x4000000000000000,其中的 32 LSB 是 0x00000000

关于c++ - 为什么在下面的C++程序中2147453647*2147453647的乘积显示为1,-2147453648*-2147453648的乘积显示为0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com