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)<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;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值