私は動作する次のCコードを持っています:
int ex(unsigned int x) {
int mask = 0x55555555;
int a = ((x >> 0) & mask );
return a + ((x >> 1) & mask );
}
ただし、これに拡張すると、異なる結果が得られます。
int ex(unsigned int x) {
int mask = 0x55555555;
int a = ((x >> 0) & mask );
int b = ((x >> 1) & mask );
return a + b;
}
この違いの理由は何ですか?
編集:注意、私はこれを32ビット用にコンパイルしています。
この違いの理由は何ですか?
1st スニペットは、2つのunsigned
を追加した結果を返し、その結果は(暗黙的に)int
に変換されます。
2nd スニペットは、2つのint
sを追加した結果を返します。
「通常の算術変換」の詳細: