2016-12-04 6 views
3

ビット単位の演算を使用して整数に5を掛けようとしています。しかし、私のコードには私が特定できないバグがあるようです。 はここに私のコードビット単位の演算子を使用して整数に5を掛ける

#include <stdio.h> 

#define print_integer(exp) printf("%s : %d\n", #exp, (exp)) 

int multiply(int num) { 
    int ans; 
    ans = num << 2 + num; 
    return ans; 
} 

int main() { 
    int a = 1, b = 2, c = 3; 
    print_integer(multiply(a)); 
    print_integer(multiply(b)); 
    print_integer(multiply(c)); 
    return 0; 
} 

編集です: - バグが並んでans = num << 2 + num;

+5

'アンス=(NUM << 2)+ NUM;' https://en.wikipedia.org/wiki/Operators_in_C_and_C% 2B%2B#Operator_precedence – wildplasser

+0

...原因 '+'が '<<'よりも優先されます。見て、https://msdn.microsoft.com/en-us/library/aa691323(v=vs.71).aspx –

+0

ああありがとう、それは働いた。 –

答えて

3
int tmp = num ; 
ans = num << 2 + tmp ; 

<<+間の優先順位は、カウンタ直感的です。潜在的な間違いのこの種の当接便利な警告を取得するには、括弧を使用して-Wallでコンパイルします。

#include <stdio.h> 

#define print_integer(exp) printf("%s : %d\n", #exp, (exp)) 

int multiply(int num) { 
     return (num << 2) + num; 
} 

int main(void) { 
    int a = 1, b = 2, c = 3; 
    print_integer(multiply(a)); 
    print_integer(multiply(b)); 
    print_integer(multiply(c)); 
    return 0; 
} 
-1

であるあなたが変化(NUM < < 2)の後にNUMを追加して、numの一時値を設定します。

+2

'num << 2'はそうではありません'num'の値を変更してください。 – giusti

+1

これはOPの元のコードとまったく同じように動作しません。 –

関連する問題