Tha*_*Bao 0 c bit-manipulation
我想找出第1位的数字是奇数还是偶数.这是代码:
int odd_ones(unsigned x)
{
x ^= x >> 16;
x ^= x >> 8;
x ^= x >> 4;
x ^= x >> 2;
x ^= x >> 1;
return !(x&1);
}
Run Code Online (Sandbox Code Playgroud)
但我不知道它是如何运作的; 我已经坚持了很长时间.
尝试证明在执行x ^= x >> 16;最后16位之后x将具有与1原始值相同的s 奇偶校验x(假设x为32位).然后,在执行x x ^= x >> 8;的最后8位之后,将具有与操作之前的1x的最后16位相同的-s 奇偶校验.通常,当你这样做时,结果的最后几位将具有与x的原始值的最后位中的s的奇偶校验相同的奇偶校验.x ^= x >> LL112*L