首页 > 试题广场 >

假定x=500,求下面函数的返回值?

[单选题]
假定x=500,求下面函数的返回值______ 。
int fun(int x)
{
    int countx = 0;
    while (x)
    {
        countx++;
        x = x & (x – 1);
    }
    return countx;
}
  • 2
  • 3
  • 5
  • 6
推荐
你好,答案是D. 6 
-------------------------------------------
我的理解是x每次与x-1进行一次与(&)操作,就会导致x二进制中的1减少一个。通过函数fun可知,x二进制中有多少位1就会进行多少次与计算。
500的二进制表示是:111110100,共有6个1。所以答案是6。
编辑于 2015-02-04 16:08:15 回复(9)
表达式"x=x&(x-1)" 的作用这条语句执行一次,就会把x用二进制格式表示时的最右边的一个二进制1变为二进制0,因为x-1会将该位(x用二进制表示时最右边的一个二进制1)变为0;

编辑于 2016-04-20 16:29:56 回复(0)
500=(111110100)b
    111110100
&   111110011
-------------------------
    111110000    第一次
&   111101111
-------------------------
    111100000    第二次
&   111011111
-------------------------
    111000000    第三次
&   110111111
-------------------------
    110000000    第四次
&   101111111
-------------------------
    100000000    第五次
&   011111111
-------------------------
    000000000    第六次
发表于 2015-06-09 16:53:52 回复(1)
函数是求1的个数。
那么怎么快速求得500的二进制有多少个1呢?
我们知道,512=2^9
500 = 511 - 11

  511 = 0001 1111 1111
-   11 = 0000 0000 1011
---------------------------------
  500 = 0001 1111 0100

511和11的二进制,相信大家都可以秒算吧?哈哈

发表于 2015-08-15 22:21:58 回复(1)
x&(x-1) 就是从有到左遇到的第一个1后面的(包括1)全都变成 0 ,所以x = x & (x-1) 表示x的二进制中1的个数
发表于 2015-07-27 22:08:17 回复(1)
类似于这样的表达式,x&(x-1)这样的逻辑运算在循环语句中,都是求x中含有多少个1,一般x的值都会很大,一看就知道是让你做简单的运算,这样的题型主要考的是对算法的理解(鄙人拙见)
发表于 2015-08-22 10:36:51 回复(0)
&按位与,对应二进制位均为1结果才为1。
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
x&(x-1) 就是从右到左遇到的第一个1后面的(包括1)全都变成 0 ,更直观的:会导致x二进制中的1减少一个。本题答案:x二进制中有多少位1就会进行多少次与计算。
500的二进制表示是:111110100,共有6个1。所以答案是6。
发表于 2015-08-10 19:23:42 回复(0)
D  ~~  这个是经典的求一个整数二进制表示中1的个数算法,避免移位过程,
发表于 2015-08-21 16:01:52 回复(0)
思路: 将x转化为2进制,看含有的1的个数。
x每次与x-1进行一次位与(&)操作,会将 x用二进制表示时最右边的1 变为0,因为x-1将会将该位(x用二进制表示时最右边出现1的位置)变为0。
原因:
当该位为右边第1位时,显然成立。
假设该位为右边第k位(k>=2),
由于该位已经是最右边的1了,所以x的第k位以后(右边)全是0, 减1后,该位后面全部变成1,这样一来x-1的第k位被借位为0,从1到k-1位全是1,x和x-1按位与的结果自然就是第1至k位都变成0。
发表于 2016-06-19 09:42:49 回复(0)
这个题目是求解整数n中1的个数,选择题中直接将它的二进制形式写出来111110100,总共有6个1。
发表于 2015-07-24 11:09:04 回复(1)
汉明重量是一串符号中非零符号的个数

汉明距离是 两个等长字符串 对应位置的不同字符的个数
就是将一个字符串变换成另外一个字符串所需要替换的字符个数。例如:
1011101 与 1001001 之间的汉明距离是 2。
2143896 与 2233796 之间的汉明距离是 3。
"toned" 与 "roses" 之间的汉明距离是 3。

一个符号串的 汉明重量 等于 同样长度的全零符号串的 汉明距离。在最为常见的数据位符号串中,它是1的个数。

都是以理查德·卫斯里·汉明的名字命名的,它在包括信息论、编码理论、密码学等多个领域都有应用
发表于 2022-01-13 12:07:30 回复(0)
X=X&(X-1)  该表达式意思为  按照二进制位  按位与
111110100   500     开始
111110011    500-1
-----------------------------
000001000      8       一次
000000111      8-1
------------------------------
111110000      496     二次
111101111       496-1
-------------------------------
111100000        480      三次
111011111          480-1
-------------------------------
111000000        448      四次
110111111       448-1
--------------------------------
110000000       384        五次
101111111      384-1
------------------------------
100000000      256        六次
011111111        256-1
------------------------------
000000000      0          结束
发表于 2021-05-12 23:19:37 回复(0)
求一个数二进制中的0或1的个数,可以这样,512=29,即二进制位10 0000 0000,那么511的二进制位1 1111 1111,   511-500=11 = 8+2+1,减去3个0,剩余6个1
发表于 2017-04-06 14:19:31 回复(0)
x = x & (x – 1)是典型的嵌入式检测有多少个二进制1的个数。
发表于 2015-08-17 21:22:21 回复(0)
x = x & (x - 1) , 运算的次数为原始x二进制中1的个数,最终到0;
也就是整个循环次数也是原始x中二进制中1的个数!
500最接近的2的指数为512=2^10,即511 = B(111111111);
511 - 500 = 11,即500的二进制位B(111110100);
数上面500二进制中1的个数即为答案!
发表于 2016-08-28 21:53:59 回复(0)
😂看错题目了。。。
发表于 2022-11-02 08:54:36 回复(0)
&为按位与,&&为逻辑与。其中按位与依据二进制运算法则进行判断。
发表于 2022-09-28 22:59:52 回复(0)
x=x&(x-1)   统计x二进制形式中1的个数
发表于 2021-05-21 09:11:59 回复(0)
比较烦二进制的与或运算,如果能一眼看出这些大大的数的二进制样子,就好办了~
发表于 2021-04-11 17:19:00 回复(0)
这个是C语言的题吗
发表于 2021-03-30 04:09:41 回复(0)
微软的题库
发表于 2021-03-03 18:09:04 回复(0)