十进制整数,计算对应的二进制数包含多少个1

 比如求0 1 0 1 0 1 0 0 0 0

0 1 0 1 0 1 0 0 0 0   - 1 = 0 1 0 1 0 0 1 1 1 1

0 1 0 1 0 1 0 0 0 0

&

0 1 0 1 0 0 1 1 1 1

(val - 1) & val  从低位开始,直至第一位为1的这部份给清0了。

 

#include <stdio.h>
#include <stdlib.h>

int BitCount2(unsigned int val)
{
    unsigned int c = 0 ;
    for (c = 0; val; ++c)
    {
        val &= (val - 1) ; // 清除最低位的1
    }
    return c ;
}
int main()
{
    printf("%d\n", BitCount2(0xfe));
}
//第2种方法
int BitCount2(unsigned int val)
{
    unsigned int c = 0 ;
    while(val){
        if(val & 1 == 1){
            ++c;
        }
        val >>= 1;
    }
    return c ;
}



 

要实现这个功能,你可以使用C语言中的位操作和循环结构。这里是一个简单的程序示例,它接受一个十进制整数,然后将其转换为二进制并按相反的顺序打印出来: ```c #include <stdio.h> // 用于存放中间结果的组 char binary[32]; void reverse_binary(int num) { int i = sizeof(binary) - 1; // 从后往前开始计 while (num != 0) { binary[i] = num % 2 + '0'; // 将余转为字符并存入组 num /= 2; // 向左移位 i--; } if (binary[0] == '0' && strlen(binary) == 1) { // 如果全是零,不打印 return; } // 反转字符串 for (i = 0; i < (strlen(binary) / 2); i++) { char temp = binary[i]; binary[i] = binary[strlen(binary) - i - 1]; binary[strlen(binary) - i - 1] = temp; } printf("Reversed binary representation of the number is: %s\n", binary); } int main() { int decimal; printf("Enter a decimal integer: "); scanf("%d", &decimal); reverse_binary(decimal); return 0; } ``` 在这个程序中,我们首先定义了一个字符组`binary`来存储二进制字。然后,我们在`reverse_binary`函中用while循环将输入的十进制不断除以2取余,并将每个余(用1或0表示)存入组。接着,如果组的最前面是0并且只有一个元素,那么就是0,不需要输出。否则,我们将组反转并打印。 在`main`函中,我们从用户那里获取输入的十进制,并调用`reverse_binary`函进行处理。 如果你运行这个程序,只需按照提示输入一个十进制整数,它就会输出该的倒序二进制表示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值