#include <stdio.h>
void f(int x)
{
int i;
for(i=0; i<32; i++) printf("%d", (x>>(31-i))&1);
printf(" ");
x = x&(x+1);
for(i=0; i<32; i++) printf("%d", (x>>(31-i))&1);
printf("\n");
}
int main()
{
f(103);
f(12);
return 0;
}
x&(x+1)
因为我们要把尾部的1全部变成0,但是我们并不知道尾部有多少个1,所以我们加个1,这样尾部原本1的地方都变成0,不过我们还会把0的地方变成1【这并不是我们需要的】,所以我们跟原本进行一个&操作就能解决这个问题