我的问题是为什么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);
result
4
10101010101010101010101010101010
4
11010101010101010101010101010101
4
10101010101010101010101010101010
4
01010101010101010101010101010101
a >> 1
无聊。它只是为一个定义的实现signed
输入负数a
.
(a & 0xaaaaaaaa) >> 1
更有趣。对于您可能拥有 32 位的情况int
(除其他外),0xaaaaaaaa
is an unsigned
文字(十六进制文字的模糊规则)。所以由于 C++ 类型提升规则a
被转换为unsigned
type 以及表达式的类型a & 0xaaaaaaaa
因此unsigned
.
为酒吧测验提出了一个很好的问题。
参考:http://en.cppreference.com/w/cpp/language/integer_literal http://en.cppreference.com/w/cpp/language/integer_literal,尤其是“文字的类型”表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)