我的问题是为什么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 –