C++ 为什么2147453647*2147453647的乘积在下面的C+中显示为1,-2147453648*-2147453648*显示为0+;节目?
我声明了两个int变量:C++ 为什么2147453647*2147453647的乘积在下面的C+中显示为1,-2147453648*-2147453648*显示为0+;节目?,c++,int,range,C++,Int,Range,我声明了两个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
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;
}
intmain()
{
INTN1=2147483647;
cout有符号整数溢出是未定义的行为()
现在,如果您想知道这些特定值是如何在特定环境中出现的,那么它们只是结果的32个最低有效位(LSB):
2147483647*2147483647
等于0x3fffff0000001
,其中32个LSB为0x00000001
-2147483648*-2147483648
等于0x4000000000000000
,其中32个LSB为0x00000000
因此,UB.“2147483647[…]是int数据类型的最大值”-不一定。
int
不能保证为32位。