package _1_Bit_Operation;
/**
* @Auther: YuanJun
* @Date: 2021/12/14 - 12 - 14 - 16:50
* @Description: _1_Bit_Operation
*/
//给定一个区间0-1之间的实数,(如0.625),类型为double
//打印它的二进制表示 0.101
//如果无法精准的用32位以内的二进制表示,则打印“ERROR”
import java.util.Scanner;
/**
* 0.625
* 第一: 先 0.625*2 = 1.25 > 1 (如果 x * 2 > 1 ,那么得到一位二进制数1, 否则为0,直到 x' * 2 = 1 ,得到最后一位二进制数,否则不能表示)
* 得到第一位二进制数 0.1
* 然后1.25 - 1 = 0.25
* 0.25*2 = 0.5 < 1
* 得到第二位二进制数 0.10
* 然后0.5*2 = 1 = 1
* 得到第三位二进制数 0.101
* 1-1 = 0 ,结束
*/
public class test9 {
//这是一个main方法,是程序的入口:
public static void main(String[] args) {
Scanner input = new Scanner(System.in) ;
System.out.println("请输入0-1之间的小数:");
double a = input.nextDouble();
double b = a;
StringBuffer str = new StringBuffer("0.");
while(a != 0) {
if ((a * 2) >= 1) {
str.append("1");
a = a * 2 - 1;
}
else{
a = a*2;
str.append("0");
}
}
if(str.length() >34){
System.out.println("ERROR:"+ b +"不能用二进制精确表示");
}
else{
System.out.println(str);
}
}
}
