精华内容
下载资源
问答
  • 十进制:由 0~9 十个数字组成二进制:由 0和1 两个数字组成1、整数转换十进制转二进制的原理:十进制的数除以2,直到商为0,最后反向取余数。比如下图中的例子,十进制的13转为二进制表示,则为1101。十进制转二进制...
    de856704a3ba79f8d9feee9df404f18b.png

    位运算在计算机编程中经常用到,所以掌握十进制和二进制间的转换十分重要。

    • 十进制:由 0~9 十个数字组成
    • 二进制:由 0和1 两个数字组成

    1、整数转换

    十进制转二进制的原理:十进制的数除以2,直到商为0,最后反向取余数。

    比如下图中的例子,十进制的13转为二进制表示,则为1101。

    c169824901b46e31a66da6aad7235a70.png

    十进制转二进制

    二进制转十进制的原理:二进制数的每一位乘以2的n次方,n 从零开始,每次加一,最后累加。

    下面是将二进制的1101转为十进制的13。

    c6cec157f6a37d0962a216c26ccb4feb.png

    二进制转十进制

    2、小数转换

    对于小数,二进制 转 十进制 比较简单,仍是二进制数的每一位乘以2的n次方,小数点前面的 n 从零开始,每次加一;小数点后面的 n 从-1开始,每次减一,最后累加。

    bd9aa709756c2b17f04601cf4dd426fd.png

    小数-二进制转十进制

    十进制 转 二进制 相对麻烦些,用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为0,整数部分为1,此时1为二进制的最后一位。

    下图是将十进制的0.625转换为二进制表示的0.101。

    77233ef3560f438faf74a6862674cb1b.png

    小数-十进制转二进制

    不过,不是所有的十进制小数都恰好能用二进制精确表示。比如十进制的0.3转化为用二进制表示,如下图所示。若用小数点后六位来表示,则只能近似为0.296875。

    d929a7505a7a4cbddb9b32af0b387042.png

    小数-十进制转二进制

    从上面的例子可以看出,二进制小数点后面的位数越多,则能表示的小数点后面的有效数字越多。

    C语言中浮点型一般分为 float 单精度型(4个字节)和 double 双精度型(8个字节),单精度浮点型小数点后面有效数字为6位,双精度浮点型小数点后面有效数字为15位。

    相关阅读

    C语言的位级运算:布尔代数

    计算机为什么用二进制和十六进制

    展开全文
  • 十进制小数转换成二进制小数把十进制小数转换成二进制小数所采用的规则是“乘以2取整数”。方法是用2乘以十进制纯小数,将其结果的整数部分去掉;再用2乘余下的纯小数部分,再去掉其结果的整数部分;如此继续下去,...

    十进制小数转换成二进制小数

    把十进制小数转换成二进制小数所采用的规则是“乘以2取整数”。方法是用2乘以十进制纯小数,将其结果的整数部分去掉;再用2乘余下的纯小数部分,再去掉其结果的整数部分;如此继续下去,直到余下的纯小数为0或满足所要求的精度为止。最后将每次得到的整数部分(0或1)按先后顺序从左到右排列,即得到所对应的二进制小数。

    0.6875*2=1.375(取1)

    (1.375-1)*2=0.75(取0)

    0.75*2=1.5(取1)

    (1.5-1)*2=1(取1)

    1-1=0(到这就结束了)

     

    十进制转二进制: 
    用2辗转相除至结果为1 
    将余数和最后的1从下向上倒序写 就是结果 
    例如302 
    302/2 = 151 余0 
    151/2 = 75 余1 
    75/2 = 37 余1 
    37/2 = 18 余1 
    18/2 = 9 余0 
    9/2 = 4 余1 
    4/2 = 2 余0 
    2/2 = 1 余0 
    故二进制为100101110

    二进制转十进制 
    从最后一位开始算,依次列为第0、1、2...位 
    第n位的数(0或1)乘以2的n次方 
    得到的结果相加就是答案 
    例如:01101011.转十进制: 
    第0位:1乘2的0次方=1 
    1乘2的1次方=2 
    0乘2的2次方=0 
    1乘2的3次方=8 
    0乘2的4次方=0 
    1乘2的5次方=32 
    1乘2的6次方=64 
    0乘2的7次方=0 
    然后:1+2+0 
    +8+0+32+64+0=107. 
    二进制01101011=十进制107.

    展开全文
  • 一、问题呈现非常经典问题,其实不仅仅是 Java 语言,还是 JS 等语言的通病,即:当我们在计算 0.1+0.2 时,惊讶的发现,结果竟然不是 0.3,而是:0....然而在十进制转二进制的过程中,有些十进制数是无法使用一...
    c73998ba352550d311f048188b6e39ff.png

    一、问题呈现

    非常经典问题,其实不仅仅是 Java 语言,还是 JS 等语言的通病,即:

    当我们在计算 0.1+0.2 时,惊讶的发现,结果竟然不是 0.3,而是:0.30000000000000004。

    二、问题分析

    问题很简单,是由于我们输入的十进制的 double 类型的数据在进行计算的时候,计算机会先将其转换为二进制数据,然后再进行相关的运算。

    然而在十进制转二进制的过程中,有些十进制数是无法使用一个有限的二进制数来表达的,换言之就是转换的时候出现了精度的丢失问题,所以导致最后在运算的过程中,自然就出现了我们看到的一幕。

    三、问题解决

    Java 语言中最经典的便是使用 BigDecimal 来解决。

    整体思路是先将 double 类型的数据转换成 BigDecimal 来进行运算,最后再转换成 double 类型的数据。

    但是此处有一个坑,即在将 double 转 BigDecimal 的时候,是可以有三种方式去实现的,其中两种构造方式,还有一种静态方法方式:

    // 方式一 public BigDecimal(double val) { this(val,MathContext.UNLIMITED);}// 方式二public BigDecimal(String val) { this(val.toCharArray(), 0, val.length());}// 方式三(其实底层就是方式二)public static BigDecimal valueOf(double val) { // Reminder: a zero double returns '0.0', so we cannot fastpath // to use the constant ZERO. This might be important enough to // justify a factory approach, a cache, or a few private // constants, later. return new BigDecimal(Double.toString(val));}

    从上面我们可以清晰地看出,其实 BigDecimal 是希望我们使用传入 string 类型的数据的构造方法。

    所以解决起来就顺水推舟了,看如下 demo:

    double d1 = 0.1, d2 = 0.2;System.out.println(d1 + d2);System.out.println(new BigDecimal(d1).add(new BigDecimal(d2)).doubleValue());System.out.println(BigDecimal.valueOf(d1).add(BigDecimal.valueOf(d2)).doubleValue());System.out.println(new BigDecimal(Double.toString(d1)).add(new BigDecimal(Double.toString(d2))).doubleValue());

    贴出运行的结果:

    0.300000000000000040.300000000000000040.30.3

    小 Tip:

    很多人会说 public BigDecimal(double val) 这个构造方法是 Java 的一个 bug,其实我并不认同,我觉得是传递的 double 类型的参数的问题,这个数据本身就存在精度的问题,所以导致了最终的计算问题。

    换言之,其实使用计算机的二进制来表达十进制的小数,本身就是个伪命题。

    四、double 转二进制

    那么,为什么使用二进制无法精确表达一个 double 类型的数据呢?下面来手动画图婆剖析下换算的方法:

    举个栗子:15.75 -> 1111.11

    step1:拆分

    将整数和小数部分拆分得:15 和 0.75

    step2:计算整数部分

    整数部分是 15,计算得 1111,见下图:

    315c52b478ed4f5bc1377d2a560cb854.png

    step3:计算小数部分

    小数部分是 0.75,计算得 0.11,见下图:

    2f23720e92ada2f130884da496699e3b.png

    step4:合并

    将整数部分和小数部分拼接得到最终的结果:1111.11

    再举个经典的栗子:0.1 -> 0.000110011001100110011001100………..

    还是四步走:

    step1:拆分

    将整数部分和小数部分拆分得: 0 和 0.1

    step2:计算整数部分

    整数部分是 0 ,计算得: 0

    step3:计算小数部分

    小数部分是 0.1,计算得:0.0001100110011001100………….,计算过程见下图:

    75b0c2d72958bc2ff302abaf6d3636f5.png

    step4:合并

    将整数部分和小数部分合并得到最终的结果:0.000110011001100110011001100………..

    五、二进制转 double

    同样举个栗子:1111.11 -> 15.75

    还是分四步走:

    step1:拆分

    将整数和小数部分拆分得:1111 和 0.11

    step2:计算整数部分

    整数部分 1111 计算得 15,详细计算过程见下图:

    70a40cda358381fe25cce61ffc54acd2.png

    step3:计算小数部分

    小数部分 0.11 计算得 0.75,详细计算过程见下图:

    0fe94555ece776bdcbde9f3e0eddc7b3.png

    step4:合并

    整数部分和小数部分合并得最终的结果:15.75

    展开全文
  • 十进制小数或带小数的十进制转二进制: 十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的...

    十进制小数或带小数的十进制转二进制:

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

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

    如:0.625=(0.101)B
      0.625*2=1.25
    取出整数部分1
      0.25*2=0.5
    取出整数部分0
      0.5*2=1
    取出整数部分1
      
    再如:0.7=(0.1 0110 0110…)B
      0.7*2=1.4
    取出整数部分1
      0.4*2=0.8
    取出整数部分0
      0.8*2=1.6
    取出整数部分1
      0.6*2=1.2
    取出整数部分1
      0.2*2=0.4
    取出整数部分0 
      0.4*2=0.8
    取出整数部分0
      0.8*2=1.6
    取出整数部分1
      0.6*2=1.2
    取出整数部分1
      0.2*2=0.4
    取出整数部分0

      
    2、十进制整数转换为二进制整数

          十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

    例、把 173D转换为二进制数。
    解:
    在这里插入图片描述

    以下为十进制小数或带小数的十进制转二进制代码。

    #include<stdio.h>
    
    #define N 10
    #define M 100 
    
    void fun10_2_Z(long number)//十进制整数部分转二进制 
    {
    	char ch[M];
    	int len=0;
    	if(number==0) 
    	{
    		printf("%d",number);//如果整数部分为零直接输出
    	} 
    	else
    	{
    		while(number)
    		{
    			ch[len++]=number%2;
    			number=number/2;
    		}
    		for( ;len>0;len--)//逆向输出 
    		{
    			printf("%d",ch[len-1]);
    		}
    	}	
    }
    void fun10_2_X(double number)        //十进制小数部分转二进制 
    {
    	int i,len=0;
    	int arry[N];
    	
    	while(number)
    	{
    		int temp = (int)(number*2);
    		arry[len++]=temp;
    		if(len==N) 
    			break;            //控制小数点后不超过十位 
    		number = 2*number-temp;
    	}
    	
    	printf(".");
    	for(i=0;i<len;i++)
    	{
    		printf("%d",arry[i]);
    	}
    }
    
    int main()
    {
    	double number;
    	scanf("%lf",&number);
    	long t=(int)number;//整数部分 
    	double m=number-t;//小数部分 
    	fun10_2_Z(t);
    	fun10_2_X(m);
    	return 0;
    }
    

    运行效果截图:

    十进制小数转二进制,运行截图:
    十进制
    在这里插入图片描述
    带小数的十进制转二进制运行截图:
    在这里插入图片描述

    展开全文
  • 位(bit)一位二进制数,又称比特 字节(byte)1B=8b内存存储的最小单元 字长:同一时间内,计算机能处理的二进制位数 字长决定了计算机的运算精度,字长越长,计算机的运算精度就越高。因此,高性能的计算机,其字长较...
  • 2019年6月23日学习记录: ...accuracy = 5 # 小数部分精度 def dtb(num): #判断是否为浮点数 if num == int(num): #若为整数 integer = str(bin(num)) integer = integer[2:] return integer else...
  • 十进制:由 0~9 十个数字组成二进制:由 0和1 两个数字组成1、整数转换十进制转二进制的原理:十进制的数除以2,直到商为0,最后反向取余数。比如下图中的例子,十进制的13转为二进制表示,则为1101。十进制转二进制...
  • 十进制转字节码字符串 String s1 = Integer.toBinaryString(-128); System.out.println("-128的字节码字符串:"+s1);//11111111111111111111111110000000 //byte b1=Byte.parseByte(s1,2);//报错,Byte为8bit,给定32...
  • 十进制转二进制(C++)

    千次阅读 2014-10-31 10:54:12
    十进制转换二进制其实不是个复杂的问题,我们首先搞清楚原理: 整数部分:如果不是0,不断除2,直到除到1为止,得到的余数最后逆向排列输出;如果是0,直接输出 小数部分:小数部分m非0,则不断乘2,如果2*m超过1...
  • 十进制转换为二进制、八进制、十六进制2.1十进制转换为二进制整数部分:整数部分除2取余数,再取倒序小数部分:小数部分乘2取整,再顺序取小数部分为零时,即为乘完或者按题目要求精度要求取...
  • 分享给大家供大家参考,具体如下:十进制小数 ⇒ 二进制小数乘2取整对十进制小数乘2得到的整数部分和小数部分,整数部分即是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分。...
  • 想写一个输入任意十进制数,然后可以转为前高后低和前低后高两种格式,32位存储的二进制数据。然后再将这两种格式的32位二进制数据正确读取出来。
  • 二进制转换为十进制:public static double bin2DecXiao(String binXStr) {double decX = 0.0; //位数int k = 0;for (int i = 0; i < binXStr.length(); i++) {int exp = binXStr.charAt(i)...
  • 如何把单精度二进制数转换成十进制数?
  • 十进制小数转二进制小数

    千次阅读 2019-08-10 04:46:19
    十进制小数转二进制小数 乘二取整,顺序排列  有无限循环的精度损失,例如十进制0.4,转换为二进制位0.0110 0110 0110 0110 ......  0.4 * 2 = 0.8 ------ 0  0.8 * 2 = 1.6 ------ 1  0.6...
  • 分享给大家供大家参考,具体如下:十进制小数 ⇒ 二进制小数乘2取整对十进制小数乘2得到的整数部分和小数部分,整数部分即是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分。...
  • 那么一个单精度十进制浮点数转二进制浮点数的规则是如何的呢?假设这里有一个小数为3.625,那么该小数对应的整数部分就是11,小数部分就是101,那么该数表示成二进制就是11.101,由于我们需要表示成浮点二进制数,...
  • 分享给大家供大家参考,具体如下:十进制小数 ⇒ 二进制小数乘2取整对十进制小数乘2得到的整数部分和小数部分,整数部分即是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分。...
  • 十进制数转换为IEEE 单精度二进制浮点数(C代码) 介绍: IEEE 单精度浮点数分为三个部分 sign(符号位)exponent(8位) fraction(尾数 23位) 总共32位 这里举一个例子:例如将7成IEEE单精度二进制...
  • 十进制小数转换为二进制 十进制小数转换方法 十进制小数→→→→→二进制小数 方法:“乘2取整” 对十进制小数乘2得到的整数部分和小数部分,整数部分既是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数...
  • 二进制 八进制 十进制 1. 进制介绍: 二进制:逢2进1 八进制:逢8进1 十进制:逢10进1 十六进制:逢16进1 注意:在电子设备中,数据的存储最小单位是字节。 表示方法: 1个字节 = 8个比特位 2. Java中把数据共...
  • 转载于:https://blog.51cto.com/12567912/1901012
  • 十进制小数转二进制小数方法</font color> 十进制小数→→→→→二进制小数 方法:“乘2取整” 对十进制小数乘2得到的整数部分和小数部分,整数部分既是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数...
  • 十进制小数转为二进制小数方法拿 173.8125 举例如何将之转化为二进制小数。①. 针对整数部分 173,采取除 2 取余,逆序排列;173 / 2 = 86 ... 186 / 2 = 43 ... 043 / 2 = 21 ... 1 ↑21 / 2 = 10 .....
  • 分享给大家供大家参考,具体如下:十进制小数 ⇒ 二进制小数乘2取整对十进制小数乘2得到的整数部分和小数部分,整数部分即是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分。...
  •   其中针对于单精度浮点数,S为符号位,只占1位,为0表示正数,为1表示负数。P为指数(阶码),用移码表示,占8位。M为尾数,用原码表示,占23位。 2、浮点数规格化表示:当尾数的值不为0时,规定尾数域的最高有效...
  • 十进制小数转二进制

    2017-10-10 22:08:06
    十进制小数乘2得到的整数部分和小数部分,整数部分既是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分. 如此不断重复,直到小数部分为0或达到精度要求为止.第一次所得到为最高...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 644
精华内容 257
关键字:

十进制转二进制精度