将整数的奇偶位对换(位运算)

题目描述:将一个数的二进制的奇偶位对换位置。例如9的二进制1001 对换完成后为0110 变成了6。

解题思路:使用位运算将输入的数字和1010101010......(一共32位16对10)做与运算取出偶数位,然后再将输入的数字和0101010101......(一共32位16对10)做与运算取出奇数位。最后将偶数位右移一位,奇数位左移一位做异或运算实现奇偶位交换。

java代码:

public class 交换奇偶位 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = 9;
		int b = swap(a);
		System.out.println(Integer.toString(a,2));
		System.out.println(Integer.toString(b,2));
		System.out.println(b);

	}
	
	public static int swap(int num) {
		int ou = num & 0xaaaaaaaa;	//和1010101010......做与运算取出偶数位
		int ji = num & 0x55555555;	//和0101010101......做与运算取出奇数位
		return (ou>>1)^(ji<<1);		//将偶数位右移一位,奇数位左移一位做异或运算实现奇偶位交换
	}

}

C++代码:

#include<iostream>
using namespace std;

int main(){
	int num,ji,ou;
	cin>>num;
	ou = num & 0xaaaaaaaa; // 十六进制转二进制一个a就是一个1010 
	ji = num & 0x55555555; // 0101
	num = (ou>>1)^(ji<<1);
	cout<<num;
	return 0; 
} 
发布了78 篇原创文章 · 获赞 101 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_41575507/article/details/105104626