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

本文介绍了一种使用位操作来计算整数中1的个数的方法。通过将数值与其减一后的值进行按位与运算,可以有效地清除最低位的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语言中,将十进制整数转换为二进制表示可以通过多种方式实现。以下是一种常用的方法:使用&ldquo;除二取余&rdquo;法,并将每次得到的余数存储在一个数组中,最后逆序输出数组中的内容,以获得正确的二进制序列。 ### 方法描述 该方法的核心思想是通过不断将输入数字除以2并记录余数来获取二进制位。具体步骤如下: - 使用一个循环,持续地将输入数字除以2。 - 每次除法操作后,将余数保存到数组中。 - 当输入数字变为0时结束循环。 - 最后,从数组末尾开始向前遍历,输出所有存储的余数,从而得到二进制字符串。 ### 示例代码 下面是一个完整的示例程序,演示如何实现上述逻辑: ```c #include &lt;stdio.h&gt; void convertToBinary(int num) { int binaryDigits[32]; // 假设最大不会超过32位 int index = 0; if (num == 0) { // 特殊情况处理 printf(&quot;0&quot;); return; } while (num &gt; 0) { binaryDigits[index++] = num % 2; // 获取当前最低位 num /= 2; // 向右移位 } // 打印结果(注意这里是倒序打印) for (int i = index - 1; i &gt;= 0; --i) { printf(&quot;%d&quot;, binaryDigits[i]); } } int main() { int decimalNumber; printf(&quot;请输入一个非负整数十进制数:\n&quot;); scanf(&quot;%d&quot;, &amp;decimalNumber); if (decimalNumber &lt; 0) { printf(&quot;错误:请输入非负整数。\n&quot;); return 1; } printf(&quot;对应二进制数为: &quot;); convertToBinary(decimalNumber); printf(&quot;\n&quot;); return 0; } ``` ### 注意事项 - 确保用户输入的是非负整数,因为负数需要额外处理(例如补码形式)。 - 如果希望支持更大的数值范围,可以考虑动态调整数组大小或使用其他数据结构。 - 对于特殊情况如输入值为0的情况进行了单独处理,以避免产生空输出[^1]。 这种方法简单且易于理解,适用于大多数基本应用场景下的十进制转二进制需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值