java神奇的位运算(2)

本文介绍了如何使用位运算实现一个数的奇偶位互换,通过与运算和或运算提取并交换二进制中的奇偶位。同时,探讨了如何将0到1之间的浮点数转化为二进制表示,当超过32位表示范围时输出ERROR。内容涉及位运算和浮点数的二进制表示规则。
摘要由CSDN通过智能技术生成

神奇的位运算

学习本篇前,建议先看一下神奇的位运算(1)


题目描述:实现一个数的二进制中的奇偶位互换,如下:

在这里插入图片描述

这道题我们需要用到与运算(&)或运算(^)

在这里插入图片描述

由图中的分析可得,我们需要两个辅助数,一个偶数位全为1,一个奇数位全为1,与偶数位全为1进行与运算,可以把原数中偶数位提取出来,与奇数位全为1进行与运算,可以把原数中奇数位提取出来,然后两个提取出的数移位再进行或运算便可以实现奇偶位互换。

package 位运算;

public class 奇偶位互换 {

	public static void main(String[] args) {
		int m=9;
		System.out.println("原数:"+Integer.toString(m,2));
		int ou=m&0xaaaaaaaa;//0xaaaaaaaa用8位十六进制表示32位二进制,一个a代表四位二进制1010
		int ji=m&0x55555555;//0x55555555,一个十六进制5代表四位二进制0101
		int n=(ou>>1)^(ji<<1);
		System.out.println("互换后:"+Integer.toString(n,2));
	}

}

题目描述:用二进制表示0到1间的浮点数,如果该数字无法用32位以内二进制表示,则打印ERROR

这道题是关于二进制与浮点数小数点部分转换的题,与位运算关系不大,但也涉及到二进制,所以我们在这里简单讨论一下。

我们首先需要知道小数与二进制的转化规则,我们将其总结为乘2挪整

在这里插入图片描述

package 位运算;

public class 二进制表示浮点数 {

	public static void main(String[] args) {
		double n=0.625;
		StringBuilder str=new StringBuilder("0.");
		while(n>0) {
			double num=n*2;
			if(num>=1) {
				str.append('1');
				n=num-1;
			}else {
				str.append("0");
				n=num;
			}
			if(str.length()>34) {
				System.out.println("ERROR");
				return;
			}
		}
		System.out.println(str.toString());	
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值