2017-10-28 5 views
-3

このコードを書き直してください。ビットシフトの左シフトが実際にどのように動作するのか理解できません。このコードを表現する方が簡単な場合は、教えてください。コードの表記(C)

このコードは、数字のビット表現で1(1)の数を計算します。

int numberofones(int value, int count) { 

    int numchars = 8 * sizeof(int); 
    int n; 

    for(n = 0; n < numchars; n++) 
    { 
    if(value & (1 << (numchars - 1 - n))) { 
    count++; 
    } 
    } 
    return count; 
} 
+0

いいえ、右シフトは、符号拡張されています。ビット数以上のシフトは未定義です。 – wildplasser

+0

@yano - 負の値を左にビットシフトすると、未定義の動作が発生します。非負の値を左にビットシフトする(結果が表現可能である限り)ことはよく定義されている。 –

+0

ああ、それは '1'がシフトしている、私は' numchars'を考えていた。十分に見ていない – yano

答えて

0
int numberofones(int value) { 

    int numchars = 8 * sizeof(int); 
    int n; 
    int count = 0 ; 

    for(n = 0; n < numchars; n++) 
    { 
    if(value & (1 << n)) 
     count++; 
    } 
    return count; 
} 
関連する問題