在c++中,如果超出范围,将输出什么值

visual what value will be printed out if it is out of range in C++

本文关键字:输出 什么 范围 c++ 如果      更新时间:2023-10-16

我是c++的新手,我有一个问题。

我使用int来打印2的前100次幂。我知道结果将超出int变量的范围。我只是好奇,因为程序给出的结果是0。0是怎么出来的?

提前感谢!

我的代码如下:
#include<iostream>
using namespace std;
void main()
{
    int a=1;
    unsigned int b=1;
    for (int i=1;i<=100;i++)     
    { 
        a=2*a;
        b=2*b;
    }
    cout<<"the first 1oo powers of 2 is (using an signed int): "<<a<<endl;
    cout<<"the first 1oo powers of 2 is (using an unsigned int): "<<b<<endl;
    //The fix
    cout<<"Enter a Char to Exit."<<endl;
    char theFix;
    cin>>theFix;
}

将无符号整数或正符号整数乘以2相当于向左移1位,而0位将从右移。经过32次迭代(假设32位整数),整个值将全部为0位。在此之后,向左移动0将不再改变结果。

由于您是c++的新手,您可能不知道计算机如何存储信息。最终,所有的整数都被分解成32位二进制数(一堆1和0)。

a = a * 2; // multiplication
a << 1;    // left shift

由于二进制数的性质,这两个指令实际上是同义的。

例如0....000010(二进制)== 2(十进制)

2 * 2 = 4  = 0....000100
4 * 2 = 8  = 0....001000
8 * 2 = 16 = 0....010000

等等…

由于整数的位计数上限为32,因此您将得到一个巨大的数字2^32 == 1000....000。当你再次乘以2时,数字再次向左移动,最后得到000……000000 = 0.

所有进一步的0 = 0的乘法,所以这就是你最终结果的来源。

编辑:我只想指出,这是唯一会发生这种确切结果的情况之一。例如,如果您尝试使用数字3,您将看到预期的整数溢出行为。