首页 > 试题广场 >

有如下一段代码:

[单选题]
有如下一段代码:
int nCount = 0;
while (x) {
    nCount++;
    x = x & (x - 1);
}
假设x初始9999,则执行完nCount值为()
  • 32
  • 999
  • 8
  • 1
每次都是消去一个1
发表于 2020-10-29 22:19:55 回复(0)
这题有问题,如果x是char呢
发表于 2022-01-09 02:56:50 回复(1)
(function(n) {
    let count = 0;
    while(n) {
        n = n&(n-1);
        count++;
    }
    console.log(count);
})(9999);
发表于 2019-09-25 19:38:16 回复(0)
求下面函数的返回值(微软) -- 统计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。
发表于 2017-08-19 16:55:01 回复(0)

把9999化为二进制,每进行一次x&(x-1)的结果就会少一个1(按位与后变为0),因此原来x的1的个数就是答案

发表于 2019-01-19 16:14:03 回复(0)
大家都知道了x&(x-1)在本题的具体用途,那么关键是如何只利用纸笔快速得出9999的二进制表示。 首先,找一个比较接近9999的较大数字,为了达成这个目标,我们可用一个结论性的数字为基准,不断进行二进制移位操作来得到更大的数字,具体如下: 基准:1024=2^10,左移三位得8192=2^13(每左移一位,结果放大一倍) 8192 :10000000000000 然后,在上面的基础上不断叠加新的数字,直至逼近9999,最后做出微调得到9999。 8192 :10000000000000 1024 :00010000000000 512 :00001000000000 256 :00000100000000 15 :00000000001111 8192+1024+512+256+15=9999 故9999的二进制表示中有8个二进制1。
编辑于 2021-11-24 10:01:14 回复(0)

X=X&(X-1)这算的是X写成二进制数后其中1的个数

发表于 2017-08-23 16:51:54 回复(0)
count = floor(log(9999)/log(2)) + 1;
得14
说明需要14位二进制表示9999
题意求9999的二进制表示中1的数量
那么小于14的C选项就是答案
编辑于 2017-10-26 10:04:42 回复(0)
求下面函数的返回值(微软) -- 统计1的个数
-------------------------------------
int func(int x)
{
    int countx = 0;
    while(x)
    {
        countx++;
        x = x&(x-1);
    }
    return countx;
}
假定x = 9999
10011100001111
答案: 8
发表于 2021-03-20 15:54:56 回复(0)
x = x & (x - 1);  //计算x中1的个数
发表于 2019-03-26 21:34:47 回复(0)
9的二进制表示为1001 x&(x-1)会将最后的1变为0 9999变为全0,需要 & 8次
发表于 2018-02-14 21:22:06 回复(0)
 x = x & (x - 1);这个代码是什么意思啊?
怎么运算啊?
发表于 2023-11-30 14:04:35 回复(0)
题目函数功能是统计十进制数转换成二进制数后位为1的个数
发表于 2023-07-01 09:54:55 回复(0)
先将9999转为二进制,除2取余倒着取,再数1
发表于 2018-06-12 02:35:00 回复(0)