雖然下面的兩個代碼片段在查找變量的操作方面略有差異,但輸出結果似乎相同。爲什麼這樣?代碼片段差異
第一個片段
#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