C 统计两个数相应的不同位(bit)

二进制中,统计两个数的相应位(bit)不同可以采用
1.异或操作,
故用异或运算结果 同0不同1
所以两个数异或的结果中1就是不同的位
然后逐位相与制成0 最后统计个数

static int BitDiffer(int a, int b)  
    {  
        int m = a ^ b;     
        int num = 0;  
        while(m>0)  
        {  
            m &= (m-1);  //逐位相与统计个数
            num++;  
        }  
        return num;  
}

或采用逐位对比

    int BitDiffer(i
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
同样可以使用运算来实现多 bit 置换,不同的是需要对每个整数进行单独的置换。以 16 整数为例,假设需要将第 2、3、5、7 和 11 的值置换到第 1、4、6、9 和 13 ,可以使用以下代码: ``` int16_t num1 = 0b1101001010100111; // 第一个二进制数 int16_t num2 = 0b1010111100110101; // 第二个二进制数 int16_t result1 = 0; // 第一个数置换后的结果 int16_t result2 = 0; // 第二个数置换后的结果 result1 |= ((num1 & (1 << 1)) << 0); // 第 2 的值置换到第 1 result1 |= ((num1 & (1 << 2)) << 1); // 第 3 的值置换到第 4 result1 |= ((num1 & (1 << 4)) << 2); // 第 5 的值置换到第 6 result1 |= ((num1 & (1 << 6)) << 3); // 第 7 的值置换到第 9 result1 |= ((num1 & (1 << 10)) << 4); // 第 11 的值置换到第 13 result2 |= ((num2 & (1 << 1)) << 0); // 第 2 的值置换到第 1 result2 |= ((num2 & (1 << 2)) << 1); // 第 3 的值置换到第 4 result2 |= ((num2 & (1 << 4)) << 2); // 第 5 的值置换到第 6 result2 |= ((num2 & (1 << 6)) << 3); // 第 7 的值置换到第 9 result2 |= ((num2 & (1 << 10)) << 4); // 第 11 的值置换到第 13 ``` 其中,`num1` 和 `num2` 分别表示两个原始的二进制数,`result1` 和 `result2` 分别表示两个数置换后的结果。对于每一个数的置换,都可以使用运算将其取出,并将其左移或右移到目标置,然后使用按或运算将结果合并。例如,`((num1 & (1 << 1)) << 0)` 表示将 num1 的第 2 的值取出来,并将它左移 0 ,即不移动,最后得到的值为 0 或 1,然后将它与结果的第 1 进行按或运算,得到的结果就是第 1 的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值