将偶数的二进制反转

例如6的二进制为110,反转后就是011(倒过来了)
int n = 6;
int bit;
intrn; // 保存反转得到的结果
while(n)
{
bit = n % 2; // 相当于取得是6的最低位0,以2取余就是取二进制的低位
rn = bit + rn*2;
// 二进制110,算十进制是1x22 + 1x21 + 1x20,rn*2
// rn所得的,就是每次循环取到的逆转的二进制位(原来的低位,如今的高位)再加上上一次所得结果(原来的高位,如今的低位)
n = n/2; // 除以2,也就相当于右移一位,>>1
}

还有另外一种写法:
while(k)
{
rn <<= 1;
rn |= (k & 1);
k >>= 1;
}
k = rn;

输入奇数程序也不会出错,不过奇数的二进制反转了跟没反转都一个样,分析一下奇数就可以发现奇数的二进制一般都是对称的,所以,对于对称的奇数来说,反转了也没啥区别。

转载于:https://www.cnblogs.com/yuyounglife/p/5661165.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值