精华内容
下载资源
问答
  • 二进制数0舍1入
    2021-06-09 08:23:06

    二进制是否有类似十进制中“四舍五入”的说法

    二进制转换成十进制保留小数部分是否要四舍五入,...应当采用“零舍一入”(相当于十进制数的“四舍五入”)。

    用38线译码器74ls138,实现3位二进制的四舍五入,38线译码器输入对应的110为十进制数6,所以对应的输出应该为最小项m6',即Y0Y1Y2Y3Y4Y5Y6Y7为11111101

    十进制1.001转二进制,保留八位小数是多少?(要四...1.00000010,二进制数是由数字0和1组成,所以你不用考虑存在什么四舍五入。

    十进制小数怎么转换为二进制小数?

    乘2取整法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分 。 2.为零为止。如果永远不能为零,就同十进制数的四舍五入一样,按照要CSS布局HTML小编今天和大家分享保留多少位小数时。

    windows自带计算器有四舍五入功能吗?

    系统自带的计算器是不支持小数位转换的。角度是DEG,弧度是RAD,梯度是GRA,转换模式的方法是按MODE,然后按相应的键。二进制,八进制,十六进制和十进制一样是进位制式。四字、双字、单字、字节是数据类型,定义了数据的容量与精度。

    Python 为什么不解决四舍五入的“bug”

    更多相关内容
  • 二进制浮点数下的四

    千次阅读 2020-05-04 22:54:31
    文章目录你不是真正的四入1. 前言2. 浮点数在解决问题之前,我们需要来了解一下什么是浮点数。3. 计算精度4. 四问题5 . 总结 1. 前言 采用IEEE-754标准表示浮点数,并不能精确表示许多实数,所以会有一些...

    二进制浮点数下的四舍五入


    1. 前言


    采用IEEE-754标准表示浮点数,并不能精确表示许多实数,所以会有一些存在。本文就是对方面的问题做一个刨根揭底的探索以及摸索对应的解决方案。

    2. 浮点数

    在解决问题之前,我们需要来了解一下什么是浮点数。

    2.1 什么是浮点数
    在计算机系统的发展过程中,曾经提出过多种方法表达实数。典型的比如相对于浮点数的定点数(Fixed Point Number)。在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数。最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式。这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa,尾数有时也称为有效数字——Significand;尾数实际上是有效数字的非正式说法),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达实数。比如 123.45 用十进制科学计数法可以表达为 1.2345 × 102 ,其中 1.2345 为尾数,10 为基数,2 为指数。浮点数利用指数达到了浮动小数点的效果,从而可以灵活地表达更大范围的实数。

    计算机中是用有限的连续字节保存浮点数的。在 IEEE 标准中,浮点数是将特定长度的连续字节的所有二进制位分割为特定宽度的符号域,指数域和尾数域三个域,其中保存的值分别用于表示给定二进制浮点数中的符号,指数和尾数。这样,通过尾数和可以调节的指数(所以称为"浮点")就可以表达给定的数值了。

    2.2 IEEE 浮点数
    计算机中是用有限的连续字节保存浮点数的。在 IEEE 标准中,浮点数是将特定长度的连续字节的所有二进制位分割为特定宽度的符号域,指数域和尾数域三个域,其中保存的值分别用于表示给定二进制浮点数中的符号,指数和尾数。这样,通过尾数和可以调节的指数(所以称为"浮点")就可以表达给定的数值了。很多语言都是用这种规范的浮点数表示法,javascript也不例外。

    IEEE 754 指定:

    两种基本的浮点格式:单精度和双精度。

    IEEE 单精度格式具有 24 位有效数字精度,并总共占用 32 位。

    IEEE 双精度格式具有 53 位有效数字精度,并总共占用 64 位。

    2.3 范围和精度
    从上面可以看到一个数在计算机里面的表示位数是有限的,儿Javascript 作为一门动态语言,其数字类型只有 number 一种。 nubmer 类型使用的就是 IEEE754 标准中的 双精度浮点数。也就是说在js里面一个数的存储空间都是固定死的。下面来看一下这个定死的空间到底有多大。

    2.3 范围和精度
    从上面可以看到一个数在计算机里面的表示位数是有限的,儿Javascript 作为一门动态语言,其数字类型只有 number 一种。 nubmer 类型使用的就是 IEEE754 标准中的 双精度浮点数。也就是说在js里面一个数的存储空间都是固定死的。下面来看一下这个定死的空间到底有多大。

    从上图可以看出 在js里面只有52位用来存放数据。
    那么问题来了,如果一个数52位存储空间不够,也就是二进制也会出现想十进制一样的无限数的时候,会发生什么事情呢?

    IEEE754采用的浮点数舍入规则有时被称为舍入到偶数(Round to Even)

    这有点像我们熟悉的十进制的四舍五入,即不足一半则舍,一半以上(包括一半)则进。不过对于二进制浮点数而言,还多一条规矩,就是当需要舍入的值刚好是一半时,不是简单地进,而是在前后两个等距接近的可保存的值中,取其中最后一位有效数字为零者。

    3. 计算精度

    在解决问题之前,我们还需要先理解计算过程 这里用一个最经典的例子先来说明一下js中数据计算的过程

    0.1 + 0.2
    复制代码
    很多人都看到过这个表达式,那么这个表达式背后究竟发生了什么过程呢,请看本胖一步步说来

    A 十进制转二进制
    第一步浏览器会将我们看到的十进制0.1以及0.2都转为二级制的0.1和0.2

    对于十进制转二进制,大部分人都知道整数是除2取余,逆序排列 直到商为0时为止。但是小数呢,规则是和整数不一样的,规则如下

    乘2取整,顺序排列 直到积中的小数部分为零
    复制代码
    有了规则,我们现在来对0.1,0.2做一个转化

    0.1转为二进制

    二进制0.00011001100110011…(循环0011)
    尾数为1.1001100110011001100…1100(共52位,除了小数点左边的1),指数为-4(二进制移码为00000000010),符号位为0
    计算机存储为:0 00000000100 10011001100110011…11001
    因为尾数最多52位,所以实际存储的值为0.0001100110011001100110011001100110011001100110011001101
    复制代码
    0.2转为二进制

    二进制0.0011001100110011…(循环0011)
    尾数为1.1001100110011001100…1100(共52位,除了小数点左边的1),指数为-3(二进制移码为00000000011),符号位为0
    存储为:0 00000000011 10011001100110011…11001
    因为尾数最多52位,所以实际存储的值为0.001100110011001100110011001100110011001100110011001101
    复制代码
    0.1的二进制 + 0.2的二进制 这里要先说一下二进制的加法规则

    计算机计算二进制加法是分三部,第一步为将两个加数转换为二进制数,计算两个加数不需要进位的和,得出的结果。
    第二部将两个加数进行与运算(&)。
    第三部利用与运算得到结果进行左移运算(<<)(同时为计算两个加数需要进位的和),得出结果。将或异运算的结果和左移运算的结果作为两个新的加数,重复此操作。直到当与运算的结果为0,则异或运算的结果则为两个加数的和所对应的二进制数。
    复制代码
    按照上述规则,我们已经将0.1,0.2都完成了第一步,现在要进行第二三步。最终得到如下结果

    0.01001100110011001100110011001100110011001100110011001100
    复制代码
    然后将二进制所得的结果再转为十进制的表示,下面是二进制小数转为十进制的规则

    整数部分是从右到左用二进制的每个数去乘以2的相应次方,小数部分则是从左往右开始计算
    复制代码
    最终得到的结果就是0.30000000000000004

    好了,一个0.1+0.2的计算过程大概就是这些过程。

    4. 四舍五入问题

    4.1 问题
    现在,我们就可以来问答一开始的问题了,为什么会出现文章一开始计算的问题情况了。

    1 65.00(商品价格)* 0.119(税费) = 7.734999999999999 !== 7.735
    复制代码
    2 (65.00(商品价格)* 0.119(税费)).toFixed(2) = 7.73 != 7.74
    复制代码
    第一个相乘为什么不等于7.735呢,本胖在第三节就给出了解释,现在我们来说一下第二个四舍五入精度问题。

    对一个数进行四舍五入操作的时候,也是需要先将这个我们理解的十进制数转为计算机理解的二进制数,然后用计算机的四舍五入规则(2.3 范围和精度中已经说明)进行对应的操作。

    当65.00(商品价格)* 0.119(税费)的二进制存储的时候就已经是一个近似值了,然后再用二进制的四舍五入进行操作最后将得到的结果再转为十进制当然会存在一个误差。

    看到这里是不是就明白了为什么在调用toFixed()方法的时候会存在误差,因为我们看到的都是十进制的世界,而真实运算的却是二进制的世界,不同的二个世界,不同的规则。

    4.2 解决方案
    前面说到十进制的小数在转为二进制的时候很容易出现无法精确表示的情况,但是十进制整数,在转为二进制的时候是都可以精确表示的,因为十进制整数转二进制的规则如下

    除2取余,逆序排列,直到商为0时为止
    复制代码
    所以机智的同学就会想到下面的办法

    把小数放到位整数(乘倍数),再缩小回原来倍数(除倍数)
    复制代码
    按照上面的办法可以写出下面的函数

    function toFixed(num, s) {
    var times = Math.pow(10, s)
    var des = num * times
    des = Math.round(des) / times
    return des + ‘’
    }
    复制代码
    注意这里用了Math.round()这个方法将数字转为最接近的整数,如果用parseInt()的话需要手动加0.5。下面是这3个方法的主要区别。

    1. Math.round

    作用:四舍五入,返回参数+0.5后,向下取整。

    Math.round(5.57)  //返回6

    Math.round(2.4)   //返回2

    Math.round(-1.5)  //返回-1

    Math.round(-5.8)  //返回-6

    复制代码
    2.parseInt

    作用:解析一个字符串,并返回一个整数,这里可以简单理解成返回舍去参数的小数部分后的整数。

    parseInt(5.57)  //返回5

    parseInt(2.4)  //返回2

    parseInt(-1.5)  //返回-1

    parseInt(-5.8)  //返回-5
    复制代码

    5 . 总结

    1.看似有穷的数字, 在计算机的二进制表示里却是无穷的,由于存储位数限制因此存在“舍去”,精度丢失就发生了。

    2.解决精度丢失的方法就是把小数放到位整数(乘倍数),再缩小回原来倍数(除倍数)

    展开全文
  • 如果你对这部分的内容十分熟悉,请直接跳到下一步,学习二进制的长除法。被除除以除数,所得结果为商。比较除数和被除的首位数。如果除数比较大,就继续将下一位数加到被除中,直至被除大于除数。例如,用...

    ae3228b3d0c36cc841599e98fc333206.png

    1回顾十进制的长除法

    十进制是以10为基数的数制,我们日常使用的数字都是十进制数字。如果你已经很久没有做过长除法,不妨利用算题172 ÷ 4来复习一下。如果你对这部分的内容十分熟悉,请直接跳到下一步,学习二进制的长除法。

    被除数

    除以

    除数

    ,所得结果为

    比较除数和被除数的首位数。如果除数比较大,就继续将下一位数加到被除数中,直至被除数大于除数。例如,用172 ÷ 4时,我们会比较4和1,发现4 > 1后,就比较4和17。

    在比较的被除数的最后一位上写下商的首位数。比较4和17,我们发现17整除4得4,因此,我们将商的首位数4写到7的上面。

    相乘和相减后得到余数。用商的位值乘以除数,本题中即4 x 4 = 16。在17下面写16,然后用17 - 16,得到余数1。

    重复。再次将除数4与余数1比较,发现4 > 1,“结合”被除数的下一位数,然后比较4和12。12是4的三倍,而且没有余数,所以将3写作商的下一位数。答案是43。

    20090cb2d72c6a858383d57140b0c190.png2列出二进制的长除法问题。

    以10101 ÷ 11为例。将问题写成长除法形式,以10101为被除数,11为除数。在上面留出空处写商,下面写下计算过程。

    6293f76698f1c3fdc0ff0fd3b02a6ffa.png

    3比较除数和被除数的首位数。

    二进制长除法的解题方法与十进制长除法一样,但实际上前者要简单得多。整除被除数时,每一位的结果要么等于0,要么等于1:

    11 > 1,所以1“无法”整除11。在商的第一位,也就是被除数首位数字的上方,写一个0。

    60795788e67728012e65f56d33ae8a50.png

    4继续加入下一位数,直到结果为1。

    以下是例题后面的计算怎么做二进制数的除法运算的方法:

    结合被除数的下一位数。11 > 10。在商的位置再写一个0。

    结合下一位数。11 < 101。在商的位置再写一个1。

    f4ad3992c6ba8d06d484ea7f4ea47ea3.png

    5计算余数。

    和十进制的长除法一样,我们用刚刚算出的1乘以除数11,然后将结果与刚才计算中被除的几位数对齐,写到被除数下面。在二进制中,由于1乘以除数总是等于除数,我们可以将之简化:

    在被除数下面写下除数。这里,我们将11与被除数的前三位数101对齐,写到它的下面。

    计算101 - 11,得到余数10。如果需要复习二进制数的减法运算,可以参阅本网站的相关文章。

    cbec0eaf4ea375e418d51ed6a1da4cd3.png

    6重复这一怎么做二进制数的除法运算的方法,直至问题解决。

    将被除数的下一位数与余数结合,得到100。由于11 < 100,所以在商的下一位数写1。使用之前的方法,继续计算:

    在100下面写11,相减得到1。

    结合被除数的最后一位数,得到11。

    11 = 11,所以商或答案的最后一位数写1。

    没有余数,因此问题得到解决。答案是

    00111

    ,或者简化成111。

    828b2f44c878c669bc2fdc2168f7e539.png

    7如有必要,添加小数点。

    有时,结果不是整数。如果使用最后一位数后仍有余数,就在被除数后面加”.0”,在商里面加”.”,这样,你可以再次结合下一位数,并继续计算。重复这一怎么做二进制数的除法运算的方法,直至答案足够精确,然后四舍五入。在纸上计算时,你可以去掉最后一位数的0,取整,如果最后一位数是1,就去掉这个1,然后在新的最后一位数字上加1。在编程中,请遵循某种四舍五入的标准算法,以避免在二进制数和十进制数之间转换时出错。

    二进制除法的结果通常包含循环小数,这种情况比十进制数制多。

    由于“小数点”(decimal point)只用于十进制,所以在任何其他数制中,我们会使用更通用的术语“小数点”(radix point)。

    展开全文
  • 一、 十进制与二进制之间的转换 1.1 十进制转换为二进制,分为整数部分和小数部分 【1】整数部分 ...举个栗子:将十进制数168转换为二进制数 除数 被除数 商 余数 168 / 2 = 84 ...... ...

    一、 十进制与二进制之间的转换

    1.1 十进制转换为二进制,分为整数部分和小数部分

    【1】整数部分

    方法:采用"除2取余,逆序排列"法

    即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。

    举个栗子:将十进制数168转换为二进制数

                 除数       被除数           商           余数

    第0位:168      /        2       =     84  ......    0

    第1位:84       /         2       =     42 ......     0

    第2位:42       /         2       =     21 ......     0

    第3位:21       /         2       =     10 ........   1

    第4位:10       /         2       =      5 ........    0

    第5位:5         /         2       =      2 ........    1

    第6位:2         /         2       =      1 ........    0

    第7位:1         /         2       =      0 ........    1

    最后,读数字从最后的余数向前读,即10101000

    (2)小数部分

    方法:采用"乘2取整,顺序排列"法

    即将小数部分乘以2,然后取整数部分;剩下的小数部分继续乘以2,然后取整数部分;剩下的小数部分又乘以2,一直取到小数部分为零为止。

    如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。

    换句话说就是0舍1入。读数要从前面的整数读到后面的整数。

    栗子1:将0.125换算为二进制

                 乘数            乘数           积           整数部分      小数部分

    第2位:0.125     *      2       =     0.25    ......     0    ......    0.25 

    第1位:0.25       *      2       =     0.5      ......     0    ......    0.5

    第0位:0.5         *      2       =     1.0      ......     1    ......    0.0

    最后读数,从整数部分自上而下排序,第一位读起,读到最后一位,即为0.001

    栗子2:将0.45转换为二进制(保留到小数点第四位)

                乘数            乘数              积           整数部分     小数部分

    第4位:0.45      *      2         =     0.9    ......     0      ......    0.9

    第3位:0.9        *      2         =     1.8    ......     1      ......    0.8 

    第2位:0.8        *      2         =     1.6    ......     1      ......    0.6 

    第1位:0.6        *      2         =     1.2    ......     1      ......    0.2 

    第0位:0.2        *      2         =     0.4    ......     0      ......    0.4

    从上面步骤可以看出,当第5次做乘法时候,得到的积是0.4,那么小数部分继续乘以2,得0.8;继续,0.8又乘以2的,得到1.6;然后一直乘下去,最后不可能得到小数部分为零。因此,这个时候只好学习十进制的方法进行四舍五入了,但是二进制只有0和1两个,于是就出现0舍1入。这个也是计算机在转换中会产生误差,但是由于保留位数很多,精度很高,所以可以忽略不计。

    最后度数,从整数部分自上而下,可知将0.45转换为二进制约等于0.0111

    上面介绍的方法是十进制转换为为二进制的方法,需要大家注意的是:

    • 十进制转换为二进制,需要分成整数小数两个部分分别转换。

    • 当转换整数时,用的是除2取余法;

    • 当转换小数时,用的是乘2取整法。

    • 注意转换进制数的读数方向。

    因此,我们从上面的方法,我们可以得出十进制数168.125转换为二进制为10101000.001,或者十进制数转换为二进制数约等于10101000.0111。


    1.2 二进制转换为十进制

    方法:按权相加法

    以小数点(.)为分界点,整数部分二进制转为十进制要从右到左用二进制的每个数去乘以2的相应次方,而小数点后的则是从左往右。

    即将二进制每位上的数乘以权,然后相加之和即是十进制数。

    举个栗子:将二进制数101.101转换为十进制数。

    101.101 =1*2^2+0*2^1+1*2^0+1*2^(-1)+0*2^(-2)+1*2^(-3) = 4+0+1+1/2+0+1/8 = 5.625​​​ 

    得出结果:(101.101)2=(5.625)10

    大家在做二进制转换成十进制需要注意的是:

    • 要知道二进制每位的权值。

    • 要能求出每位的值。


    二、 二进制与八进制之间的转换

    首先,我们需要了解一个数学关系,即23=8,24=16,而八进制和十六进制是用这关系衍生而来的,即用三位二进制表示一位八进制,用四位二进制表示一位十六进制数。

    接着,记住4个数字8、4、2、1(23=8、22=4、21=2、20=1)。现在我们来练习二进制与八进制之间的转换。

    (1) 二进制转换为八进制

    方法:取三合一法

    即从二进制的小数点为分界点,向左(向右)每三位取成一位,接着将这三位二进制按权相加,得到的数就是一位八位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的八进制数。如果向左(向右)取三位后,取到最高(最低)位时候,如果无法凑足三位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足三位。

    栗子1:将二进制数101110.101转换为八进制

    按照取三合一原则,将101110.101划分为:101 110 101每三位对应一位八进制数,则

    101 ----->1* 2^2 + 0* 2^1 + 1* 2^0 = 5 

    110 ----->1* 2^2 + 1* 2^1 + 0* 2^0 = 6 

    101 ----->1* 2^2 + 0* 2^1 + 1* 2^0 = 5 

    最后得到结果:将二进制101110.101转八进制数为56.5

    栗子2:将二进制数1101.1转换为八进制

    按照取三合一原则,不够三位的在高位补0,将1101.1划分为:001 101 100 每三位对应一位八进制数,则

    001 ----->0* 2^2 + 0* 2^1 + 1* 2^0 =

    101 ----->1* 2^2 + 0* 2^1 + 1* 2^0 =

    100 ----->1* 2^2 + 0* 2^1 + 0* 2^0 = 54

    得到结果:将十进制数1101.1转八进制数为15.4

    (2) 将八进制转换为二进制

    方法:取一分三法

    即将一位八进制数分解成三位二进制数,用三位二进制按权相加去凑这位八进制数,小数点位置照旧

    举个栗子:

    1.将八进制数67.54转换为二进制

    因此,将八进制数67.54转换为二进制数为110111.101100,即110111.1011

    大家从上面这道题可以看出,计算八进制转换为二进制

    首先,将八进制按照从左到右,每位展开为三位,小数点位置不变

    然后,按每位展开为22,21,20(即4、2、1)三位去做凑数,即a×22+ b×21 +c×20=该位上的数(a=1或者a=0,b=1或者b=0,c=1或者c=0),将abc排列就是该位的二进制数

    接着,将每位上转换成二进制数按顺序排列

    最后,就得到了八进制转换成二进制的数字。

    以上的方法就是二进制与八进制的互换,大家在做题的时候需要注意的是:

    • 他们之间的互换是以一位与三位转换,这个有别于二进制与十进制转换
    • 大家在做添0和去0的时候要注意,是在小数点最左边或者小数点的最右边(即整数的最高位和小数的最低位)才能添0或者去0,否则将产生错误

    三、 二进制与十六进制的转换

    方法:与二进制与八进制转换相似,只不过是一位(十六)与四位(二进制)的转换

    (1) 二进制转换为十六进制

    方法:取四合一法

    即从二进制的小数点为分界点,向左(向右)每四位取成一位,接着将这四位二进制按权相加,得到的数就是一位十六位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的十六进制数。如果向左(向右)取四位后,取到最高(最低)位时候,如果无法凑足四位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足四位。

    1.例:将二进制11101001.1011转换为十六进制

    按照取四合一原则,不够四位的在高位补0,将11101001.1011划分为:1110 1001 1011 每四位对应一位八进制数,则

    1110 ----->1*2^3 + 1* 2^2 + 1* 2^1 + 0* 2^0 = 14=

    1001 ----->1*2^3 + 0* 2^2 + 0* 2^1 + 1* 2^0 =

    1011 ----->1*2^3 + 0* 2^2 + 1* 2^1 + 1* 2^0 = 11=B

    得到结果:将二进制11101001.1011转换为十六进制为E9.B

    2.例:将101011.101转换为十六进制

    因此得到结果:将二进制101011.101转换为十六进制为2B.A

    (2)将十六进制转换为二进制

    方法:取一分四法

    即将一位十六进制数分解成四位二进制数,用四位二进制按权相加去凑这位十六进制数,小数点位置照旧。

    1.将十六进制6E.2转换为二进制数

    因此得到结果:将十六进制6E.2转换为二进制为01101110.0010即110110.001


    四、八进制与十六进制的转换

    方法:一般不能互相直接转换,一般是将八进制(或十六进制)转换为二进制,然后再将二进制转换为十六进制(或八进制),小数点位置不变。那么相应的转换请参照上面二进制与八进制的转换和二进制与十六进制的转。


    五、八进制与十进制的转换

    (1)八进制转换为十进制

    方法:按权相加法

    即将八进制每位上的数乘以位权,然后相加之和即是十进制数。

    例:1.将八进制数67.35转换为十进制

    (2)十进制转换为八进制

    十进制转换成八进制有两种方法:

    1)间接法:先将十进制转换成二进制,然后将二进制又转换成八进制

    2)直接法:前面我们讲过,八进制是由二进制衍生而来的,因此我们可以采用与十进制转换为二进制相类似的方法,还是整数部分的转换和小数部分的转换,下面来具体讲解一下:

    1.整数部分

    方法:除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。

    2.小数部分

    方法:乘8取整法,即将小数部分乘以8,然后取整数部分,剩下的小数部分继续乘以8,然后取整数部分,剩下的小数部分又乘以8,一直取到小数部分为零为止。如果永远不能为零,就同十进制数的四舍五入一样,暂取个名字叫3舍4入。

    例:将十进制数796.703125转换为八进制数

    解:先将这个数字分为整数部分796和小数部分0.703125

    因此,得到结果十进制796.703125转换八进制为1434.55

    上面的方法大家可以验证一下,你可以先将十进制转换,然后在转换为八进制,这样看得到的结果是否一样


    六、十六进制与十进制的转换

    (1)十六进制转换为十进制

    方法:按权相加法

    即将十六进制每位上的数乘以位权,然后相加之和即是十进制数。

    16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。字母不区分大小写。

    十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……

    所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。

    举个栗子:将十六进数 0X5FA5转为十进制数

    第0位:5 *16^0 = 5

    第1位:A*16^1 = 10*16^1 = 160

    第2位:F*16^2 = 15*16^2 = 3840

    第3位:5*16^3 = 20480

    将十六进数 0X5FA5转为十进制数即24485

    可以看出,所有进制换算成10进制,关键在于各自的权值不同。

    (2)十进制转换为十六进制

    十进制转换成十六进制有两种方法:

    1)间接法:先将十进制转换成二进制,然后将二进制又转换成十六进制。

    2)直接法:前面我们讲过,十六进制是由二进制衍生而来的,因此我们可以采用与十进制转换为二进制相类似的方法,还是整数部分的转换和小数部分的转换。

    下面来具体讲解一下直接法:

    • 整数部分

    方法:除16取余法

    即每次将整数部分除以16,余数为该位权上的数,而商继续除以16,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止。另外,所得到的商的最后一位余数是所求二进制数的最高位。最后读数时,从最后一个余数起,一直到最前面的一个余数。

    • 小数部分

    方法:乘16取整法

    即将小数部分乘以16,然后取整数部分,剩下的小数部分继续乘以16,然后取整数部分,剩下的小数部分又乘以16,一直取到小数部分为0为止。如果永远不能为零,就同十进制数的四舍五入一样,暂取个名字叫3舍4入。故该法称“乘基取整法”

    例:将十进制数120.12转换为十六进制数

    解:先将这个数字分为整数部分120和小数部分0.12

    因此,得到结果十进制120.12转换十六进制为0x78.1eb851eb852


    七、Java代码测试十进制分别转换为十六进制,二进制,八进制

    核心思想:余数定理

    测试类:

    /**
     * 测试:十进制数分别转换为十六进制,二进制,八进制数
     * 核心思想:余数定理
     */
    public class DataConvertDemo{
    	public static void main(String[] args){
    
    		int a = 27, b = 37, c = 47;
    
    		System.out.print("十进制数" + a + "=>十六进制输出:");
    		cha_16(a);
    
    		System.out.println();
    		System.out.print("十进制数" + b + "=>二进制输出:");
    		cha_2(b);
    
    		System.out.println();
    		System.out.print("十进制数" + c + "=>八进制输出:");
    		cha_8(c);
    	}
    
    	/**
    	 *
    	 * 转为16进制
    	 */
    	static void cha_16(int n) {
    		if (n >= 16) {
    			cha_16(n / 16);
    		}
    		if (n % 16 < 10) {
    			System.out.print(n % 16);
    		} else{
    			System.out.print((char) (n % 16 + 55));
    		}
    	}
    
    	/**
    	 * 转为2进制
    	 */
    	static void cha_2(int n) {
    		if (n >= 2){
    			cha_2(n / 2);
    		}
    		System.out.print(n % 2);
    	}
    
    	/**
    	 * 转为8进制
    	 */
    	static void cha_8(int n) {
    		if (n >= 8) {
    			cha_8(n / 8);
    			System.out.print(n % 8);
    		} else{
    			System.out.print(n);
    		}
    	}
    }

    测试结果:

    十进制数27=>十六进制输出:1B
    十进制数37=>二进制输出:100101
    十进制数47=>八进制输出:57

    展开全文
  • 二进制二进制转换

    2022-05-19 20:19:40
    二进制转八进制、16进制
  • 计算机基础---1、十进制0.1转二进制

    千次阅读 2021-07-22 01:44:30
    计算机基础---1、十进制0.1转二进制一、总结一句话总结:用脑子,10进制整数转2进制是除2,10进制小数转2进制是靠乘2取1二、十进制0.1转二进制进制转换0.1(十进制) = 0.0001100110011001(二进制)十进制数0.1转二进制...
  • 进制转换、运算法则
  • 小数部分可利用该编程方法(详见Python-十进制的小数部分转换为其他进制数)进行转换。最后分别将转换之后的整数部分和小数部分写在一起即可。这里在前面编程方法的基础上(详见Python-十进制的小数部分转换为其他进制...
  • 3.3、指令系统对应微程序二进制代码及分析(4分) 3.4、机器程序及分析(4分) 四、实验步骤(4分) 4.1、微程序写入及校验(2分) 4.2、机器程序写入及校验(2分) 五、实验结果及分析(16分) 5.1、...
  • #Python# 十进制数转换为二进制数(包含小数)

    千次阅读 多人点赞 2020-05-02 20:26:12
    #Python# 十进制数转换为二进制数(包含小数)问题描述问题分析代码 问题描述 编写程序,输入十进制小数(只考虑正数),把它转换为以字符串形式存储的二进制小数,输出该二进制小数字符串。对于转换得到的二进制...
  • 第一部分:整数转换 逐次除2取余法用2逐次去除待...例子1: 将83转换成二进制数(逐次除2取余法) 得到的余数依次为: 1 0 1 0 0 1 1 可得到:(83)10=(1010011)2第二部分:小数转换 乘2取整法逐次用2去乘待...
  • 二进制浮点数以及二进制浮点数算术运算二进制浮点数表示半精度浮点数单精度浮点数双精度浮点数特殊情况浮点数的运算步骤一、对阶二、尾数运算三、结果规格化左规操作右规操作四、 舍入处理五、...
  • js采用IEEE-754浮点数表示法(几乎所有现代编程语言采用),这是一种二进制表示法,可以精确的表示分数如 1/2、1/4、1/8和1/1024。但遗憾的是我们经常用的分数(特别是金融方面)都是十进制分数1/10、1/100等。...
  • 二进制 十进制 八进制
  • (1) 十进制转换为二进制,分为整数部分和小数部分① 整数部分方法:除2取余法,即每次将整数部分除以2,余数为该位权上的,而商继续除以2,余数又为上一个位权上的,这个步骤一直持续下去,直到商为0为止,最后...
  • 二进制运算及转换(课件)

    千次阅读 2021-07-27 00:28:36
    二进制运算及转换(课件)计算机基础-二进制运算及转 换 课程导入 在日常生活中,人们广泛使用的是十进 制,有时也会遇到其他进制的。 数制 又叫进位计数制,指的是一种计数规则 二进制 十二进制 十进制 十进制 ...
  • python 二进制与十进制之间的转换

    千次阅读 2020-11-21 03:03:13
    1、十进制 与 二进制之间的转换(1)、十进制转换为二进制,分为整数部分和小数部分整数部分方法:除2取余法,即每次将整数部分除以2,余数为该位权上的,而商继续除以2,余数又为上一个位权上的。这个步骤一直...
  • 这里也可以进行类似十进制中四的操作:假如要保留4位二进制小数,若第五位二进制小数位为0则不进位,若第五位二进制小数位为1则进位。 Example 1进制数:18.6875 整数部分=18 18/2 => 商=9...
  • 二进制小数转换为十进制数

    万次阅读 2017-07-07 13:57:09
    1二进制小数转换为十进制数 先举一个例子,例如:0.101,第一个1代表的是2的负一次方(0.5),即1*0.5,第二个1代表的是2的负三次方(0.125),即1*0.125,结果为0.5+0.125=0.625,简而言之,每个1乘以其所在位...
  • 二进制和量化编码

    千次阅读 2021-04-18 00:11:20
    小数 10 进制转二进制: 如 0.8, 转为 2 进制要: 0.8×2=1.6→10.6×2=1.2→10.2×2=0.4→00.4×2=0.8→00.8×2=1.6→1⋮×2=⋮→⋮ \begin{aligned} 0.8 \times 2=1.6\to1 \\ 0.6\times2=1.2\to1\\ 0.2\times2=0.4...
  • 机器中float的二进制舍入问题

    千次阅读 2016-04-19 22:24:21
    **机器中float的二进制舍入问题** 在计算机中,对于精度取舍的问题一直都比较模糊,到底什么时候要舍去,什么时候要输出,下面我就以计算机中的float型为例子,来简单地说一说float的四五“”。float型在计算机...
  • 浮点数转换二进制

    2022-03-08 18:55:23
    整数部分至今进行转换 例如3.75 先转换 3 = 11 小数点保留 然后转换小数部分 0.75 * 2 = 1.5 ; 0.5 * 2 = 1.0 ;...如果永远不能为零,就同十进制数的四一样,按照要求保留多少位小数时,就根据后
  • 首先是关于float最常见的1.0f==0.99999999f,返回值为true,这个问题我判断的是0.99999999超出JAVA规定的7~8位有效数字范围了,最后一位9四,所以0.99999999四之后为1.0,所以转化成二进制数后和1.0f咦...
  • 浮点数转换为二进制存储

    千次阅读 2021-08-08 10:31:31
    尾数:M是一个二进制小数,因为是二进制,所以科学计数法中这个值范围是:1≤M 尾数:M是一个二进制小数,因为是二进制,所以科学计数法中这个值范围是:1≤M IEEE754对有效数字M和指数E,还有一些特别规定。1≤M&...
  • c语言各进制转换方法

    2021-05-22 17:00:45
    学习c语言需要进行的二进制,八进制,十进制,十六进制之间的转换算法,希望对各位朋友有所帮助二进制,八进制,十进制,十六进制之间的转换算法一、 十进制与二进制之间的转换(1) 十进制转换为二进制,分为整数部分和...
  • 重要声明:本文章仅仅代表了作者个人对此观点的理解和表述。读者请查阅时持自己的意见进行讨论。 本文原文来自 《二进制的认识和Java中对二进制的使用》。...二进制数据是用01两个数码来表示的...
  • 二进制乘法运算

    千次阅读 2020-11-21 16:23:20
    定点一位乘法1.1定点原码一位乘法1.2定点补码一位乘法1.3定点原码位乘法1.4定点补码位乘法2.浮点数加减法运算 1.定点一位乘法 1.1定点原码一位乘法 原码相乘,积符号同号得正、异号得负,数值为两绝对值之...
  • (1) 十进制转换为二进制,分为整数部分和小数部分① 整数部分方法:除2取余法,即每次将整数部分除以2,余数为该位权上的,而商继续除以2,余数又为上一个位权上的,这个步骤一直持续下去,直到商为0为止,最后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,300
精华内容 23,720
热门标签
关键字:

二进制数0舍1入