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)<charArr.length) { temp = charArr[i]; charArr[i] = charArr[i+1]; charArr[i+1] = temp; } } return Integer.valueOf(String.valueOf(charArr), 2); }
解法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; }