首页 > 试题广场 >

假定x=65530,下面函数的返回值是多少?

[单选题]
假定x=65530,下面函数的返回值是多少?()
int func(x){
    int countx = 0;
    while (x){
        countx++;
        x = x & (x - 1);
    }
    return countx;
}
  • 100
  • 14
  • 20
  • 16
推荐
答案:B
函数的作用是统计x二进制数中1的个数。
这个作用是对整型中1的个数进行统计,x=x&(x-1);的作用是每次循环把x的二进制中从右往左数的最后一位1变成0,直道变成全0为止,循环结束。
65530的二进制是0000 0000 0000 0000 1111 1111 1111 1010,所以结果是14
还有类似的题目,迭代式为x=x|(x+1),作用是统计x二进制中0的个数
编辑于 2016-11-06 10:40:54 回复(7)
答案:B
因为65530对应的二进制为:1111 1111 1111 1010
而x=x&(x-1)的作用是不断的与x小1的数进行与运算,实际它的作用是计算一个数中二进制的1的个数
例如:
1111 1111 1111 1010 & 1111 1111 1111 1001  = 1111 1111 1111 1000
1111 1111 1111 1000 & 1111 1111 1111 0111  = 1111 1111 1111 0000
.
.
.
所以最终65530对应的二进制中有14个1,所以答案为14,选B

发表于 2015-01-14 16:10:17 回复(0)
做对此题有两个关键点:
1、知道函数的功能是求1的个数
2、能够快速将65530换算成二进制
65535是16个1,65530=65535-5,5是101,有2个1,则65530有14个1。

发表于 2015-08-11 11:29:33 回复(0)
x = x & (x - 1); 可以用来统计x的二进制的1的个数
x=x|(x+1) 可以用来统计x的二进制的0的个数
非常好的两个统计二进制数0、1个数的方法。

发表于 2016-03-29 14:26:54 回复(0)
每进行一次x&(x-1),,原来x的二进制的1就减少一个,知道x为0为止
发表于 2022-03-31 03:25:09 回复(0)
x&(x-1)计算计算数二进制中1的个数
编辑于 2024-04-18 00:08:38 回复(0)
最大数65535,最大数是奇数记清楚了
发表于 2019-02-27 22:31:50 回复(0)
好题
发表于 2016-09-08 22:01:25 回复(0)
函数的作用是统计x二进制数中1的个数。
这个作用是对整型中1的个数进行统计,x=x&(x-1);的作用是每次循环把x的二进制中从右往左数的最后一位1变成0,直道变成全0为止,循环结束。
65530的二进制是0000 0000 0000 0000 1111 1111 1111 1010,所以结果是14

65530对应的二进制为:1111 1111 1111 1010
而x=x&(x-1)的作用是不断的与x小1的数进行与运算,实际它的作用是计算一个数中二进制的1的个数
例如:
1111 1111 1111 1010 & 1111 1111 1111 1001  =  1111 1111 1111 1000
1111 1111 1111 1000 & 1111 1111 1111 0111  = 1111 1111 1111 0000 
.
所以最终65530对应的二进制中有14个1
发表于 2016-06-27 23:09:54 回复(0)
x=x&(x-1)是每次循环把x的二进制中从右往左数的最后一位由1变成0为止,循环结束。
发表于 2016-04-28 18:48:51 回复(0)
统计1的个数
发表于 2016-04-12 18:43:22 回复(0)
x=x&(x-1),还可以判断是不是2的幂的数      x-1=11111111111
x=x|(x+1),作用是统计x二进制中0的个数,这个还是第一次见。。。。。
发表于 2015-11-01 13:39:59 回复(0)
func的功能是计算二进制x中1的个数,65535-65530=5.也就是相差5(二进制表示为101).可知65530中有两个位数为零。16-2=14.
发表于 2015-08-25 10:49:08 回复(0)