1.6 位运算思维:将整数的奇偶位互换(2种解法)

Problem: 

将整数的二进制奇偶位互换后输出该数的十进制数

解法1:

将该整数N转化为二进制的字符数组,之后直接交换奇数位和偶数位就行,然后再将二进制数组转化为十进制数

实现代码:

public static int getSwap1(int num) {
	char[] charArr = Integer.toBinaryString(num).toCharArray();
	for (int i = 0; i < charArr.length; i=i+2) {
		char temp;
		if((i+1)

 

解法2:

使用位运算&分别取出该整数N二进制的奇数和偶数位,之后将得到奇数位的数向右移一位得到数字a,将得到的偶数位向左移一位得到数字b,然后将a^b就是答案

实现代码:

public static int getSwap2(int num) {
	//0xaaaaaaaa是10101010.....的16进制表示方式
	int jishu = num&0xaaaaaaaa;//将数字和10101010.....&运算得到奇数位
	int oushu = num&0x55555555;//将数字和01010101.....&运算得到偶数位
	jishu = jishu>>1;//将奇数位右移一位
	oushu = oushu<<1;//将偶数位左移一位
	int result = jishu^oushu;
	return result;
}

 

你可能感兴趣的:(算法很美,算法很美)