算法学习|题目:将整数的二进制形式的奇偶位互换(基于Java)

题目:将整数的二进制形式的奇偶位互换

题目描述:
例如:1001 --> 0110
题目描述

分析:

(int类型为32位,为描述方便,在此用8位表示)
①保留1001的偶数位,屏蔽奇数位:
00001001 & 10101010 = 00001000
②保留1001的奇数位,屏蔽偶数位:
00001001 & 01010101 = 00000001
③将获取的偶数位向右移一位:
00001000 >> 1 = 00000100
④将获取的奇数位向左移一位:
00000001 << 1 = 00000010
⑤将③④得到的数据相或即可得到结果
00000100 ^ 00000010 = 00000110
Tips:
③④步骤起到交换奇偶位的作用
偶数位:1010 --> 右移一位后变为 0101 -->原本在偶数位的变到奇数位
奇数位:0101 --> 左移一位后变为 1010 -->原本在奇数位的变到偶数位
⑤步骤起到变换奇偶位后,两者进行合并得到结果

代码展示:

import java.util.Scanner;
public class Demo{
	public static void main(String[] args) {
		//键盘录入一个整数
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个整数");
		int N = sc.nextInt();
		//打印该整数的二进制形式
		System.out.println(N+"的二进制形式为:"+Integer.toBinaryString(N));
		
		//保留偶数位:将原数与1010···1010(32位)相与,1010用16进制可以表示为A
		int ou = N & 0xAAAAAAAA;
		//保留奇数位:将原数与0101···0101(32位)相与,0101用16进制可以表示为5
		int ji = N & 0x55555555;
		//结果
		int result = (ou >> 1) | (ji << 1);	
		//输出
		System.out.println(N+"的二进制形式奇偶位互换后变为:"+result);
		System.out.println(result+"的二进制形式为:"+Integer.toBinaryString(result));
	}
}

结果展示:

结果展示
骚话时刻:
一时发博一时爽,一直发博一直爽!
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值