首页 > 试题广场 >

函数如下: int function(x) {

[填空题]
函数如下:
int function(x)  { 
    int flag = 0; 
    while(x)  { 
          x = x&(x-1); 
          flag ++; 
     } 
    return flag ; 
} 

function(9561) =1

二进制数字中1的个数

很经典

发表于 2018-08-17 17:12:45 回复(0)
x&(x-1)的结果是把x二进制最后一位1清零,所以题目意思是求x二进制1的个数
发表于 2020-08-13 16:08:17 回复(1)
可以先用1101试一下,然后就明白是1的个数了,,

发表于 2020-07-30 17:48:25 回复(0)
就是看传入的数二进制中有多少个1
发表于 2022-08-27 10:07:04 回复(0)
x类型需要定义下吧十进制还是十六进制,16进制答案是对的,但十进制就不一样了
发表于 2022-01-13 12:24:36 回复(0)
考点:求一个二进制数中1的个数
关键:x&(x-1)
分析:个位数-1会导致最近的1和遇到1之前的0取反(借1,不用借1则没有0),之后按位&去掉了借过的1,总体1的个数-1,减为0时循环结束,flag实质是计数器,改成count更好理解。
发表于 2021-02-18 17:43:10 回复(0)
用到了位运算的知识:n & (n - 1) 的作用是n的二进制形式的最低位的1变为0,其余部分保持不变.

发表于 2021-08-22 21:29:12 回复(0)
在c 里面 function(x)这个里面应该要加一个标识符吧
发表于 2020-10-09 14:28:59 回复(0)
参数没有给定数据类型,有可能数据截断了
发表于 2020-09-04 14:49:37 回复(0)
10010101011001共七个1
发表于 2023-08-15 13:29:00 回复(0)
这道题还有一点就是while(x)的理解,只要x不为零就能一直执行。用1101试一下,会惊讶的发现不管哪一位有1,x = x&(x-1),都能恰好将x中的该位1去掉。

发表于 2022-04-25 12:02:40 回复(0)
#include<iostream> 
using namespace std;

int main()
    {
    int x; 
    int flag = 0;
    printf("输入值\n");
    scanf("%d",&x);
    while(x)  
        {
        x = x&(x-1);
        flag ++;
         }

    printf("值==%d\n",flag);
    }
发表于 2021-11-30 19:17:03 回复(0)
统计这个二进制数中1的个数
发表于 2021-03-03 10:01:56 回复(0)