栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java神奇的位运算(2)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java神奇的位运算(2)

神奇的位运算

学习本篇前,建议先看一下神奇的位运算(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());	
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/344984.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号