インタビューの質問:整数を入力し、整数の2進数で1の数を出力します。

コード:C言語

//输入一个整数,输出该整数二进制中1的个数。其中负数用补码表示。
//左移运算符是用来将一个数的各二进制位全部左移若干位。相当于乘法运算,表示为"<<" 
//右移运算符是用来将一个数的各二进制位全部右移若干位。相当于除法运算,表示为">>" 

#include<stdio.h>
//整数与数字“1”进行与运算(&)。低位到高位循环,与运算,左进一位。
int CalOne1(int n)
{
    int count=0;
    while(n)  
    {
        if((n & 1)==1)  ++count;
        n=n>>1;
    }
    return count;
}
//将一个书减去1,在与原数做与运算,就可以把原数二进制表示中最右边的一个1变成0
//这个数的二进制中有多少个1就可以进行多少次这样的运算。 
int CalOne2(int n)
{
    int count=0;
    while(n)  
    {
        ++count;
        n=(n-1)&n;
    }
    return count;
}
int  main()
{
    int one ;
    int n;
    scanf("%d",&n);
    one=CalOne2(n);
    printf("%d",one);
 } 
公開された19元の記事 ウォンの賞賛5 ビュー7738

おすすめ

転載: blog.csdn.net/qq_38119372/article/details/79651579