java 位运算:将整数的奇偶位互换

题目:
输入一个整数,将整数的二进制数中的奇偶位互换。
例如:
9=1001,奇偶互换为0110=6.
思路:
一个数的二进制,用另外一个类似010101或者101010的二进制数做与运算。(原二进制数,从地位往高位数奇偶。)
与010101做与运算为保留奇数位上的数y。(奇数位上y为1则1&1=0,y为0则0&1=0,还是保留了原位上的0这个数字。)
与101010做与运算为只保留偶数位上的数x。
在这里插入图片描述
为了达到奇偶位互换的效果,将只保留了奇位上的数向左移一位(因为其最高位为0,不会溢出。此时两只保留的数x,y;0,0是对齐的)
在这里插入图片描述
将只保留了偶位上的数向右移动一位(其最低位为0,不会溢出)。(这样达到了奇偶互换的效果)
在这里插入图片描述
再将两数做异或,或者做或运算(因为只保留奇、偶位上的数,不可能有连续的11,)。
废话说了这么多,上代码
代码:

import java.util.*;
public class 奇偶互换 {
public static void main(String[] args) {
	Scanner sc=new Scanner(System.in);
	int N=sc.nextInt();
	System.out.println("输入的数为:"+N);
	System.out.println("他的二进制为:"+Integer.toString(N, 2));
//N从低位往高位数奇偶,低位第一位为奇数位
	int ji=N&0b01010101_01010101_01010101_01010101;//0b用二进制表示数
	System.out.println("只保留奇位后为:"+Integer.toString(ji, 2));
	
	int ou=N&0b10101010_10101010_10101010_10101010;
	System.out.println("只保留偶位后为:"+Integer.toString(ou, 2));
	
	int f=(ji<<1)^(ou>>1);//被保留下的奇位左移,被保留下的偶位右移
	System.out.println("奇偶互换后为:"+f);
	System.out.println("奇偶互换后的二进制表示为:"+Integer.toString(f, 2));
}
}

关键代码:
1.

int ji=N&0b01010101_01010101_01010101_01010101;//被赋值后的int ji,其奇数位上保留了原N奇数位上的数,ji的偶数位上全为0
int ou=N&0b10101010_10101010_10101010_10101010;//同理
int f=(ji<<1)^(ou>>1);//达到奇偶互换的效果

***觉得好用的朋友点个赞!***在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值