2016-11-12 61 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 :)这是因为运营商的优先 –