位运算test1——java实现浮点数转化为二进制

给定一个介于0和1之间的实数,(如0.625),类型位double,打印它的二进制表示(0.101,因为小数点后的二进制分别表示0.5,0.25,0.125…)。如果该数字无法精确地用32位以内地二进制表示,则打印“ERROR”。

分析:
二进制小数点旁边的1左移一位代表乘以2,右移一位代表除以2

十进制整数转化为k进制用除法,小数(浮点数)转化为k进制则用乘法

**乘的或者除的数为k **

小数点左边第一位是几就添加几,比如上面0.625乘以2得到1.25,则得到0.1

然后抹掉小数点左边第一位,即将它设置为0

所以1.25转化为0.25

java代码实现如下:

public class test1 {
	public static void main(String[] args) {
		double num=0.625;
		//通过StringBuilder类创建一个对象,预设值为“0.”,类型为字符串类型
		StringBuilder sb = new StringBuilder("0.");
		//判断这个数如果不为0则表示还能继续乘以2
		while(num>0) {
			double r=num*2;
			//判断小数点左边第一位是否为1
			if (r>=1) {
				//如果小数点左边第一位为1,则sb后面添加1,并且抹掉那个1
				sb.append("1");
				num=r-1;
			}
			else {
				//如果小数点左边第一位为0,则sb后面添加0
				sb.append("0");
				num=r;
			}
			if(sb.length()>34) {//如果该数字不能用32位以内的二进制表示则打印“ERROR”
				System.out.print("ERROR");
				return;
			}
		}
		System.out.println(sb.toString());
	}
}

StringBuilder的简单介绍

在java中,除了可以使用String类来存储字符串,还可以使用StringBuilder类或StringBuffer类存储字符串,String类创建一个对象并赋值后,该对象的值是不可以改变的,必须重新创建一个对象,即所指向的内存空间不同了:

s=“IM”; s=s+“hello!”

字符串s 被修改,创建了一个新的名为s的对象,指向了不同的内存空间,这样对象就增加了,占用的内存增多,降低运算的效率,那么可以使用StringBuilder类或StringBuffer类来避免这种问题。至于StringBuilder类或StringBuffer类的不同之处在于,StringBuilder没有实现线程安全,所以性能略高,因此一般情况下,如果需要创建一个内容可变的字符串对象,应该优先考虑使用StringBuilder类。

更详细的内容可以参考这篇文章:https://www.cnblogs.com/chengshan/p/12272443.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值