在c++中,如果超出范围,将输出什么值
visual what value will be printed out if it is out of range in C++
我是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,您将看到预期的整数溢出行为。
相关文章:
- 没有输出的合并排序我做错了什么?
- 什么是现实中的"endl"(或任何输出操纵器)?它是如何实现的,它如何与操作员<<一起工
- 为对象分配整数.输出将是什么?
- 以下与指针相关的代码的输出是什么?
- Omnet++中的.vec和.sca输出有什么区别?
- 流中的输入位置和输出位置有什么区别?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 从 c++ 中的实例化进程获取输出的可靠方法是什么?
- 我的输出结果是 0 英寸C++.可能是什么问题
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 使用OpenMP获得完整、无损坏的输出需要什么
- 代码输出随机符号,我不确定出了什么问题
- 以下程序在 c++ 中的输出是什么?
- 堆排序,我无法弄清楚我的代码出了什么问题,输出顺序不正确
- 任何人都解释下面的代码,它的输出是什么?
- 当我打印字符串时,我不知道它是什么输出
- 为什么输出不同以及此代码中有什么错误
- 为C程序获取不同的输出?该程序应该输出什么
- 这段代码输出什么笑脸
- 在c++中,如果超出范围,将输出什么值