Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么2147453647*2147453647的乘积在下面的C+中显示为1,-2147453648*-2147453648*显示为0+;节目?_C++_Int_Range - Fatal编程技术网

C++ 为什么2147453647*2147453647的乘积在下面的C+中显示为1,-2147453648*-2147453648*显示为0+;节目?

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

我声明了两个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;
}
intmain()
{
INTN1=2147483647;

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

现在,如果您想知道这些特定值是如何在特定环境中出现的,那么它们只是结果的32个最低有效位(LSB):

  • 2147483647*2147483647
    等于
    0x3fffff0000001
    ,其中32个LSB为
    0x00000001
  • -2147483648*-2147483648
    等于
    0x4000000000000000
    ,其中32个LSB为
    0x00000000

  • 因此,UB.“2147483647[…]是int数据类型的最大值”-不一定。
    int
    不能保证为32位。