关于位运算的一道笔试题
来源:互联网 发布:甩定位软件 编辑:程序博客网 时间:2024/05/15 19:48
求下面函数的返回值 假设x=9999
int fun(int x)
{
int countx=0;
while(x)
{
x=x&(x-1);
countx++;
}
return countx;
}
解答:
fun(x)返回x表示成二进制时“1”位的个数。
9999二进制为10011100001111,里面一共8个1,所以返回8.
以下所说x都为2进制表示。
每次执行循环体,x中最右边为“1”的位都会变成0.详细:
当x末位为1时,如10111,x-1=10110,两者按位与,最右边的1变成0,x变成10110,计数器自增,进入下次循环;
当x末位为0时,如110000,x-1=101111,这时原本为1的左起第二位已经变成0,但后面多出了很多1.现在两者再按位与一下,就消除了这些多余的1,得到100000
也就是说 x&(x-1)每次消除二进制里面的一个1
- 关于位运算的一道笔试题
- 关于位运算的一道试题校招笔试题
- 一道位运算的算法题
- 一道位运算的算法题
- 由一道关于位运算的程序设计题引发的思考
- 一道关于字符串逆序的笔试题
- 分享一道关于素数的笔试题
- 一道关于this的笔试题
- 关于密码破解的一道笔试题
- 关于一道阿里巴巴笔试题的思考
- 关于创新工场的一道笔试题
- 一道关于字符查找的笔试题
- 关于mysql语句的一道笔试题
- 一道关于绑鞋带的笔试题
- 一道关于内存分配的笔试题
- 一道关于绑鞋带的笔试题
- 一道关于fork的笔试题
- 一道关于fork的笔试题
- MFC打印
- Flex之视窗状态 ------ 示例代码演示
- ajax文件上传应用
- 日常javascript之一
- 永远不要在生气的时候做出重要决定
- 关于位运算的一道笔试题
- Flex 快捷键
- Java内存溢出导常时的解决方案
- Flex常用AS
- 安装配置Apache和Subversion常见错误
- 浅析.Net共享程序集编程
- apache2.0.63配置代理连接weblogic923
- No data type for node
- 某人的面试经历