我们知道1&0是1 0&0是0,我们genju&的这个特性来判断一个数的二进制位上是1还是0,那么这里我们也可以对这道题用&的特性来写,我们想把末尾的1全部变为0只需要把末尾的1&0即可,如果末尾不是1,是0,那0&0也还是0。
我们因为不知道末尾有多少个1,因此我们可以用进制的思想,x&x+1就可以把末尾的0全部去掉:
#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(128+64+2);
f(128+64+15);
f(128+64+1);
return 0;
}