[凡鸽鸽]《算法营03》将整数的奇偶位互换

《算法营03》

将整数的奇偶位互换

类似下面表格中的情况,将整数二进制中的奇偶位进行互换

0001001
0000110

比如:9 的奇偶位互换后得到的结果为 6

实现原理:

1.由于 0 与任何数和与运算的结果都为 0(即消除任何数),而 1 和任何数与运算结果都为任何数本身。

2.故可以先用……0101010101的二进制数与 整数进行与运算 并保存运算的值为X,达到保留奇数位,消除偶数位的效果。

3.反之再用1010101010……的二进制数与 整数进行与运算并保存运算的值为Y,达到保留偶数位,消除奇数位的效果。

4.最后再将保存的值 X, Y 进行错位:令存储奇数位的 X 左移一位,储存偶数位的 Y 右移一位;最后再进行异或运算,求得结果即为 原整数奇偶位互换的结果。
(注意:哪边为偶数位、哪边为奇数位仅由选取的起点决定,本质上只是相隔位进行互换)

代码:

#include<iostream>
using namespace std;
int main()
 {
    system("color F0");
    int n, X, Y, m; 
	cout << "请输入需要进行奇偶位互换的整数:" << endl; cin >> n; //获取输入的整数 
    X = n & 0x5555555; //储存奇数位 
    Y = n & 0xaaaaaaa; //储存偶数位 
    m = (X << 1) ^ (Y >> 1);
    cout << "整数" << n <<"奇偶位互换的结果为:" << m <<endl;
    system("pause") ;
    return 0;
 }
测试结果如图所示:

测试结果

tip:

1.代码中的 0x 表示十六进制数,十六进制是逢十六进一;
2.也就是可以用0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f表示个位,其中 a 表示十进制中的10,而十进制逢十进一 等同于 二进制逢二进一;
3.故 可用0xaaaaaaaa表示1010101010……
而0x55555555表示0101010101……

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值