虽然下面的两个代码片段在查找变量的操作方面略有差异,但输出结果似乎相同。为什么这样?代码片段差异
第一个片段
#include<iostream>
using namespace std;
int main()
{
int number = 3,find;
find = number << 31;
find *= -1;
cout << find;
return 0;
}
第二摘录
#include<iostream>
using namespace std;
int main()
{
int number = 3,find;
find = number << 31;
find *= 1;
cout << find;
return 0;
}
输出两个片段:
-2147483648
机器上的int大小是多少? 32位?我的猜测是,如果你将它转移了30位,那么你应该得到不同的结果。 – matcheek 2011-04-25 09:13:59
请参阅此[问题](http://stackoverflow.com/questions/3784996/why-does-left-shift-operation-invoke-undefined-behaviour-when-the-left-side-opera)。你正在调用未定义的行为。 – Mat 2011-04-25 09:15:41
@ matcheek:是的,它是32,但无法弄清楚如果将问题的目标更改为30,问题的目标如何得到满足。 – NirmalGeo 2011-04-25 09:18:21