我的問題是爲什麼a>>1
移位標誌位,但不是(a & 0xaaaaaaaa) >> 1
?當右移操作>>移位標誌位,當它不?
代碼片斷
int a = 0xaaaaaaaa;
std::cout << sizeof(a) << std::endl;
getBits(a);
std::cout << sizeof(a>>1) << std::endl;
getBits(a >> 1);
std::cout << sizeof(a & 0xaaaaaaaa) << std::endl;
getBits(a & 0xaaaaaaaa);
std::cout << sizeof((a & 0xaaaaaaaa)>>1) << std::endl;
getBits((a & 0xaaaaaaaa) >> 1);
結果
4
10101010101010101010101010101010
4
11010101010101010101010101010101
4
10101010101010101010101010101010
4
01010101010101010101010101010101
移位操作服從左邊參數的符號性。所以你應該質疑'a'的類型以及'a&0xaaaaaaaa'的類型。 –
_「對於負數a,a >> b的值是實現定義的(在大多數實現中,這將執行算術右移,以便結果保持負值)。」_ source:http://en.cppreference.com/w/cpp/language/operator_arithmetic#Bitwise_shift_operators –