.................

用二进制表示0-1之间的实数

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);
        }

    }
}

 

 

 

posted on 2021-12-14 21:08  么么^  阅读(278)  评论(1编辑  收藏  举报

Live2D