2016-11-12 20 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は、彼らが本当にスマートで10倍にしようと思っている人です。*本当にスマートな人は、オプティマイザ。 – user4581301

答えて

4

これは、すべての演算子の優先順位についてです。

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

従って4 << (3+4) = 512および512 << 1 = 1024

+0

ありがとうKIIV :)それは演算子の優先順位のためにあった –

関連する問題