编辑代码

/*按位运算*/

#include <stdio.h>

/*返回整数x中设置的位数*/
int count_bits(unsigned x)
{
    int bits = 0;
    while (x)
    {
        if (x & 1U) bits++;
        x >>= 1;
    }
    return bits;
}

/*返回unsigned型的位数*/
int int_bits(void)
{
    return count_bits(~0U);
}

/*显示unsigned型的位的内容*/
void print_bits(unsigned x)
{
    int i;
    for (i = int_bits() - 1; i >= 0; i--)
        putchar(((x >> i) & 1U) ? '1' : '0');
}

int main(void)
{
    unsigned a;
    printf("请输入一个非负整数。\n");
    printf("a:"); scanf("%u", &a);

    printf("\na  ="); print_bits(a);
    printf("\nlimt = %u", int_bits());

    return 0;
}