精华内容
下载资源
问答
  • 给定一个介于0和1之间的实数,(如0.625),类型为double,打印他的二进制表示(0.101),如果该数字无法精确地用32位以内地二进制表示, 则打印“ERROR” 分析: 因为二进制左移是乘二,右移是除二,0.101(二进制...

    题目描述:

    给定一个介于0和1之间的实数,(如0.625),类型为double,打印他的二进制表示(0.101),如果该数字无法精确地用32位以内地二进制表示, 则打印“ERROR”

    分析:

    因为二进制左移是乘二,右移是除二,0.101(二进制)也就是0.5+0.125=0.625

    浮点数求二进制实际上就是除二取余的逆运算,先把原数乘二,0.625*2=1.25,小数点前面有1,就把那个1干掉,输出0.1,剩下0.25,再乘二等于0.5不足1,故在后面加0,这时输出为0.10,0.5再乘二恰好是1.0那么同上干掉1,输出为0.101

    import java.util.*;
    public class Main {
    public static void main(String[] args) {
    Scanner cin = new Scanner(System.in);
    double num = cin.nextDouble();
    StringBuilder sb = new StringBuilder("0.");
    while(num > 0) {
    double r = num * 2;
    if(r >= 1) {
    num = r - 1;
    sb.append("1");
    } else {
    num = r;
    sb.append("0");
    }
    }
    if(sb.length() > 34)
    System.out.println("ERROR");
    else
    System.out.println(sb.toString());
    }
    }
    
    
    展开全文
  • 给定一个介于0和1之间的实数, (如0.625) ,类型为double,打印它的二进制表示(0.101,因为小数点后的二进制分别表示0.5,0.25.0.12…) 。 如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。 2、...

    1、题目

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

    2、知识点

    ①、java中stringBuilder的用法.
    ②、二进制小数转十进制

    0.625 * 2 = 1.25 => 0.1
    (1.25 - 1) * 2 = 0.5 => 0.10
    0.5 * 2 = 1.0 => 0.101
    (1.0 - 1) * 2 = 0.0 结束计算

    3、代码

    package lanqiao;
    
    import java.util.Scanner;
    
    public class test0107 {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		double num = sc.nextDouble();
    		
    		StringBuilder binary = new StringBuilder("0.");
    //		int count = 0;  //测试计数
    		
    		while(num > 0){
    			double t = num * 2;
    			//count ++; //测试计数
    			if(t >= 1){
    				binary.append("1");
    				num = t - 1;
    			}
    			else{
    				binary.append("0");
    				num = t;
    			}
    		}
    		//System.out.println(count); //测试计数
    		if(binary.length()>34){
    			System.out.println("ERROR");
    		}
    		else{
    			System.out.println(binary);
    		}	
    	}
    }
    

    4、运行结果

    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • 正题 //problem: // a用double定义就会丢失数据 ...//用于输出二进制 int i=0; a1[0]='0'; a1[1]='.'; while(a!=1) { a=a*2.0; if(a>1) { a1[i+2]='1'; a=a-1; }else if(a

    正题

    在这里插入图片描述

    
    #include <stdio.h>
    
    
    int main()
    {
    	double a;//a:数 
    	scanf("%lf",&a);
    	char a1[32];//用于输出二进制 
    	int i=0;
    	a1[0]='0';
    	a1[1]='.';
    	while(a!=1)
    	{
    		a=a*2.0;
    		if(a>1)
    		{
    			a1[i+2]='1';
    			a=a-1;
    		}else if(a<1)
    		{
    			a1[i+2]='0';
    		}else if(a==1)
    		{
    			a1[i+2]='1';
    			break;
    		}
    		i++;
    		if(i>31)
    		{
    			break;
    		}	
    	}
    	if(i>31)
    		{
    			printf("error\n");
    			
    		}
    	else
    	{
    		for(int j=0;j<32;j++)
    	{
    		if((a1[j]=='0')|(a1[j]=='1')|(a1[j]=='.'))
    			printf("%c",a1[j]);
    	}	
    	}
    
    
    }
    
    展开全文
  • public class 二进制小数 { public static void main(String[] args){ double num = 0.625; //1.250 StringBuilder sb = new StringBuilder("0."); while(num>0){ //乘2 double r = num*2; //判断整数部分
    public class 二进制小数 {
        public static void main(String[] args){
            double num = 0.625; //1.250
            StringBuilder sb = new StringBuilder("0.");
            while(num>0){
                //乘2
                double r = num*2;
                //判断整数部分
                if(r>=1){
                    sb.append("1");
                    //消掉整数部分
                    num=r-1;
                }else{
                    sb.append("0");
                    num=r;
                }
                if (sb.length()>34){
                    System.out.println("ERROR");
                    return;
                }
            }
            System.out.println(sb.toString());
        }
    }
    
    

    其实思路:就是将一个介于0~1之间的实数,(如6.25),类型为double,打印它的二进制数
    具体思路:

    1. 将num=0.625放进StringBuilder中。
    2. 判断num是否大于0
    3. 大于,就将num*2得:1.25
    4. 再进行判断,如果num大于1则截取整数部分的1放入"盒子",让num-1赋值给num。否则将截取整数的0放入"盒子"。
    0.625=0.101)B
    0.625*2=1.25======取出整数部分1 
    0.25*2=0.5========取出整数部分0 
    0.5*2=1==========取出整数部分1 
    

    5、判断精度,超过34位还没算出则打印ERROR

    知识点:

    1. StringBuilder的用法
    2. 十进制小数转换为二进制小数

    (1) StringBuilder用法:
    在Java中String对象是不可改变的。那么每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能。

    StringBuilder sb = new StringBuilder("0."); //也可以构造方法,先放入
    

    1、设置容量和长度
      虽然说StringBuilder是动态对象,但是你也可以给StringBuilder设置其可容纳长度。例:

    StringBuilderMyStringBuilder = new StringBuilder("Hello World!", 25);
    

    在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。
    2、常用方法

    1、append 添加
     StringBuilder sb = new StringBuilder("Hello World!");
     sb.append(" What a beautiful day.");
     System.out.println(sb);
     //打印出 Hello World! What a beautiful day.
    
    2、AppendFormat
     int MyInt= 25;
     StringBuilder sb = new StringBuilder("Your total is ");
     sb.AppendFormat("{0:C} ", MyInt);
     System.out.println(sb);
     //打印出Your total is $25.00。
    
    3、Insert 插入
     StringBuilder sb = new StringBuilder("Hello World!");
     sb.Insert(6,"Beautiful ");
     System.out.println(sb);
     //打印出Hello BeautifulWorld!
    
    4、delete 删除
    StringBuilder sb = new StringBuilder("helloooo");
    sb.delete(5,7);
    System.out.println(sb);
    //打印出 helloo
    
    5、Replace 代替
    StringBuilder sb = new StringBuilder("Hello World!");
    sb.Replace('!', '?');
    System.out.println(sb);
    
     如果程序对附加字符串的需求很频繁,不建议使用+来进行字符串的串联。可以考虑使用java.lang.StringBuilder 类
    
      public   static   void main(String[] args)   
                {   
                       String text = "" ;   
                      
                       long beginTime = System.currentTimeMillis();   
                       for ( int i= 0 ;i< 10000 ;i++)   
                             text = text + i;   
                       long endTime = System.currentTimeMillis();   
                       System.out.println("执行时间:" +(endTime-beginTime));   
                       //522秒
       
                       StringBuilder sb = new StringBuilder ( "" );   
                       beginTime = System.currentTimeMillis();   
                       for ( int i= 0 ;i< 10000 ;i++)   
                              sb.append(String.valueOf(i));   
                       endTime = System.currentTimeMillis();   
                       System.out.println("执行时间:" +(endTime-beginTime));   
                       //2秒
       
                }   
      参考出处https://www.cnblogs.com/onetheway2018/p/11553168.html
    

    (2)十进制小数转换为二进制小数
    可以参考https://www.runoob.com/w3cnote/decimal-decimals-are-converted-to-binary-fractions.html 菜鸟。

    十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。

    然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

    例如把(0.8125)转换为二进制小数。

    0.625*2=1.25======取出整数部分1 
    0.25*2=0.5========取出整数部分0 
    0.5*2=1==========取出整数部分1 
    

    所以我们上面使用的0.625得出的就是0.101

    展开全文
  • 刚学Java,老师让座一个实数进制转换的程序,分享出来以供互相学习。
  • 给定一个介于0和1之间的实数,(如0.625),类型为double,打印它的二进制表示(0.101, 因为小数点后的二进制分别表示0.5,0.25,0.125......)。 如果该数字无法精确地用32位以内的二进制表示,则打印"ERROR"...
  • 2021年02月23日 周二 天气晴 【不悲叹过去,不荒废... IEEE 浮点表示——概念2. IEEE 浮点表示——示例参考文献 1. IEEE 浮点表示——概念 2. IEEE 浮点表示——示例 参考文献 《深入理解计算机系统》第三版 ...
  • 0~1间浮点实数二进制表示 ➢给定一个介于0和1之间的实数,(如0.625) ,类型为double,打印它的二进制表示(0.101, 因为小数点后的二进制分别表示0.5,0.25.0.125…)。 ➢如果该数字无法精确地用32位以内的二进制表示...
  • 0~1直接浮点实数二进制表示 1、给定一个介于0和1之间的实数,(如0.625),类型为double 打印它的二级制表示(0.101), 因为小数点后的二进制分别表示0.5,0.25,0.125...... 2、如果该数字无法精确地用32位...
  • 0-1间浮点实数二进制表示 问题描述: (1)给定一个介于0 和1之间的实数(如:0.625),类型为double,打印它的二进制表示(0.101,因为小数后的二进制分别表示为0.5,0.25,0.125……)。 (2)如果该数字无法...
  • 1、二进制小数  前面这篇博客进制间的转换 我们已经讲过了各个进制数的表示。现在我们复习一下:   进位计数制的要素:  ①、数码:用来表示进制数的元素。比如二进制数的数码为:0,1。十进制数的数码为:0,1...
  • 题目   给定一个介于0和1之间的实数,(如0.625),类型为double,打印它的二进制表示(0...public class _06是0到1间浮点实数二进制表示 { public static void main(String[] args) { double num = 0.625; St
  • 0~1间浮点实数二进制表示 题5:0~1间浮点实数二进制表示 给定一个介于0~1间的浮点实数,(如:0.625),类型为double, 打印它的二进制表示(0.101) 因为小数点后的二进制分别为(0.5,0.25,0.125……)。 ...
  • #include<stdio.h> main() { double x; printf("输入0-1之间的一个小数:"); scanf("%lf",&x); printf("0."); x*=2; while(x!=1) { if(x>=1) { x-=1; printf("1");......
  • Java算法–第一章–位运算符(7)0~1间浮点实数二进制表示 题目:给定一个介于0和1之间的实数,(如0.625),类型为double,打印他的二进制表示(0.101,因为小数点后的二进制分别表示0.5,0.25,0.125……)。 ...
  • 给定一个介于0和1之间的实数,(如0.625),类型为double,打印它的二进制表示(0.101);如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。 import java.util.Scanner; public class LianXi { ...
  • import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); double n = sc.nextDouble(); sc.close();... StringBuilder sb = new ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,607
精华内容 4,642
关键字:

二进制实数的浮点表示