x&(x-1)作用

  • Post author:
  • Post category:其他



求下面函数的返回值(微软) — 统计1的个数



————————————-




int func(int x)

{


int countx = 0;

while(x)

{


countx++;

x = x&(

x-1

);

}

return countx;

}

假定x = 9999

10011100001111

答案: 8

思路: 将x转化为2进制,看含有的1的个数。


注:


每执行一次x = x&(

x-1

),会将

x用二进制表示时最右边的一个1

变为0,因为

x-1

将会将该位(x用二进制表示时最右边的一个1)变为0。












判断一个数(x)是否是2的n次方




————————————-

#include <stdio.h>

int func(int x)

{


if(


(x&(

x-1

))

== 0

)

return 1;

else

return 0;

}

int main()

{


int x = 8;

printf(“%d\n”, func(x));

}

注:

(1)


如果一个数是






2的n次方,那么这个数用二进制表示时其最高位为1,其余位为0。









(2)





==

优先级高于

&









版权声明:本文为jbfsdzpp原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。