我已经声明了两个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
。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句