[英]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*n1
和n2*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.