首页 > 试题广场 > 假定x=65530,下面函数的返回值是多少?
[单选题]
假定x=65530,下面函数的返回值是多少?()
int func(x)
{
    int countx = 0;
    while (x)
    {
        countx++;
        x = x & (x - 1);
    }
    return countx;
}


  • 100
  • 14
  • 20
  • 16

10个回答

添加回答
  • 推荐
    编辑于 2016-11-06 10:40:54 回复(3)
  • 答案: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)
  • 好题
    发表于 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); 可以用来统计x的二进制的1的个数
    x=x|(x+1) 可以用来统计x的二进制的0的个数
    非常好的两个统计二进制数0、1个数的方法。

    发表于 2016-03-29 14:26:54 回复(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)
牛客网,程序员必备求职神器
QQ群:169195721
微 信:www_nowcoder_com 关注
微 博:牛客网 关注

扫一扫,把题目装进口袋