首页 > 试题广场 >

求函数返回值

[单选题]
求函数返回值,输入x=9999
int func(int x){
	int count = 0;
	while (x){
		count++;
		x = x&(x - 1);//与运算
	}
	return count;
}
  • 8
  • 9
  • 10
  • 12

假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:

A = 0011 1100

B = 0000 1101

A&B = 0000 1100


&     如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。(A & B) 将得到 12,即为 0000 1100
发表于 2019-07-17 21:32:06 回复(0)
NWU头像 NWU
一个数与这个数减1的结果进行'&'按位与运算,结果为:这个数二进制数最右边的1变为0;
举例说明如下:
X=5;  
5&(5-1) = 010 1 & (0100) = 010 0
经过上述计算,5的二进制最右边的1变为了0,由此可知,题目中count是用以统计x的二进制中1的个数的
9999的二进制表示为:10011100001111 共有8个1,显然,答案为A。

发表于 2016-01-09 21:39:37 回复(0)
选择A:
考察输入数据二进制中一的个数。
9999 = 8192+1024+512+256+8+4+2+1;
所以8个1.
发表于 2015-09-23 21:37:15 回复(1)
yql头像 yql
9999的二进制10011100001111,8个1
发表于 2015-09-15 16:10:25 回复(2)
笨方法:
用9999除16得到的余数是后四位的十进制数,整数是前面的四位十进制数,然后按照二进制展开,这样很快地写出9999的二进制数,为10011100001111
然后
10011100001111             第一次
&10011100001110
10011100001110            第二次
&10011100001101
10011100001100            第三次
&10011100001011
10011100001000            第四次
&10011100000111
10011100000000 第五次
&100110111111111
10011000000000 第六次
&100101111111111
10010000000000 第七次
&100011111111111
10000000000000 第八次
&0111111111111111
00000000000000
当x为0时,不满足循环条件,退出循环,停止计数,所以函数返回的次数是8次。

编辑于 2018-08-05 11:39:15 回复(0)
从一个数的右边开始,如果其值为1,则count+1,如果值为0 则借位与
函数本质为计数 一个数的二进制中1的个数
所以答案为8
发表于 2015-09-16 18:20:04 回复(3)

n&(n-1)就是判断一个数二进制中1的个数。

发表于 2016-08-27 16:20:50 回复(0)
一个数和一个比他小一的数与运算 结果是最后一位1及以后位全变成0 第八个1变成0 第七个1变成0 第六个1变成0 第五个1变成0 第四个1变成0 第三个1变成0 第二个1变成0 第一个1变成0
发表于 2018-01-23 17:18:49 回复(0)
size_t count_zero(size_t n)//计算0的个数
{
    size_t count=0;
    while(n+1)
    {
        n|=n+1;     //目的是将数中所有的二进制0位置1
        count++;
    }
    return count;
}
size_t count_one(size_t n)//计算1的个数
{
    size_t count=0;  
     while(n)
     {
       n&=(n-1);// //目的是将数中所有的二进制1位置0
       count++;  
     }
     return count;
}
本题所以选B
其实也可以用
8192 + 1024  +512+256+8+4+2+1
就是总共8个1
发表于 2015-11-07 17:10:23 回复(2)
一个数与这个数减1的结果进行'&'按位与运算,结果为:这个数二进制数最右边的1变为0;
举例说明如下:
X=5;  
5&(5-1) = 010 1 & (0100) = 010 0
经过上述计算,5的二进制最右边的1变为了0,由此可知,题目中count是用以统计x的二进制中1的个数的
9999的二进制表示为:10011100001111 共有8个1,显然,答案为A。
发表于 2020-03-01 21:12:16 回复(0)
这个程序就是在计算二进制中1的个数:
9999的二进制为:00001 00111 0000 1111
最后结果为8
发表于 2017-09-22 09:36:55 回复(0)
此题为统计数字中1的个数,9999的二进制为1001100110011001中有8个1,所以为8.
发表于 2015-09-15 15:48:08 回复(0)
统计二进制数中个数为1的个数
发表于 2017-03-29 15:15:46 回复(0)
直接将二进制数列出来然后比对就很容易理解其过程了
发表于 2023-09-09 20:07:25 回复(0)
9999有多少个1 就是count 因为与运算全为1才唯一 但是它每次都会减1
发表于 2023-08-09 22:40:59 回复(0)
该函数功能实际上就是求一个数转化为二进制后之中1的个数,所以为8
发表于 2022-09-10 20:29:28 回复(0)
 求的是x二进制数中有多少个1
发表于 2022-04-06 10:31:02 回复(0)
位运算的功能 剑指offer也考了一道
发表于 2022-04-05 17:33:30 回复(0)
这种题解题思路是啥
发表于 2022-04-05 16:12:11 回复(0)
计算一个二进制数中1的个数的方法
发表于 2022-03-31 19:09:17 回复(0)