2016-11-12 71 views
0

我在Visual Studio 2008中運行簡單的程序,它給出瞭如下的2個結果。 請幫助我瞭解爲什麼在第一種情況下它給結果= 1024 案例1:位操作符對輸出的優先級的影響

#include<windows.h> 
#include<iostream> 

using namespace std; 

int main() 
{ 
    int i =4; 
    k = i<<3 + i<<1; 
    cout<<"Result "<<k; 

    return 0; 
} 

輸出爲1024

case2: 
    int j=0; 
    j=i<<3; 
    int n = i<<1; 
    k = j+ n; 
    cout<<"Result "<<k; 

輸出爲40

+0

給我們足夠的代碼來重現您的結果。另外,你期望什麼,爲什麼你期望它? –

+0

'k = i << 3 + i << 1;' – Real73

+1

@ ShahrairNazimReal是什麼意思?* ShahrairNazimReal是*認爲*他們真的很聰明,試圖乘以10。*真的很聰明的人打開優化。 – user4581301

回答

4

這是所有關於運算符優先:

i = 4; 
k = i << 3 + i << 1; 
// is the same expression as: 
k = (4 << (3 + 4)) << 1; 

因此4 << (3+4) = 512512 << 1 = 1024

+0

非常感謝KIIV :)這是因爲運營商的優先 –