二进制和十进制之间的互相转换原理(正数,负数,小数)

目录

十进制转换为二进制

整数转二进制

正整数转换

负整数转换

小数转二进制

小数转换

整数加小数转换

转换无限循环

二进制转换为十进制

转10进制正整数

转10进制负整数

转10进制小数


十进制转换为二进制

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

整数转二进制

正整数转换

  • 采用"除2取余,逆序排列"法:
    • 首先用十进制整数除以2,得到一个商和余数
    • 然后再用得到的商除以2,又会得到一个商和余数
    • 重复操作,一直到商为小于1时为止
    • 然后将得到的所有余数全部排列起来,再将它反过来(逆序排列),一定要反过来!一定要反过来!一定要反过来!
  • 例如我们将52转为二进制,如下所示:
    • 52除以2等于为26,余数为0。
    • 26除以2等于为13,余数为0。
    • 13除以2等于为6,余数为1。
    • 6除以2等于为3,余数为0。
    • 3除以2等于为1,余数为1。
    • 1除以2等于为0,余数为1。
    • 余数按相反的顺序排列,整数52的二进制数值结果就是110100

负整数转换

十进制负数转换为二进制的方法为

  • 将十进制转换为二进制数。
  • 对该二进制数求反。
  • 再将该二进制数加1. 总之就是将十进制数转换为二进制数求补码即为结果。
  • 比如: -16
    • 第一步:16的十进制转为二进制结果为00010000
    • 第二步:求反:11101111
    • 第三步:加1等于11110000 所以-16的十进制转换为二进制为11110000

小数转二进制

  • 采用"乘2取整,顺序排列"法:
    • 用2乘十进制小数,可以得到积,将积的整数部分取出
    • 再用2乘余剩下的小数部分,又得到一个积,再将积的整数部分取出
    • 重复操作,直到积中的小数部分为零,此时0或1为二进制的最后一位,或者达到所要求的精度为止

小数转换

  • 例如将0.875转换为二进制:
    • 0.875乘以2等于1.75,取出整数部分1。
    • 0.75乘以2等于1.5,取出整数部分1。
    • 0.5乘以2等于1,取出整数部分1。
    • 0.875转换为二级制结果就是0.111

整数加小数转换

  • 如果小数的整数部分有大于0的整数时,将整数部分和小数部分先单独转为二进制,再合在一起就可以了
    • 例如:2.875
    • 2的二进制是10
    • 0.875的二级制是0.111
    • 合在一起就是10.111

转换无限循环

  • 需要的注意的10进制小数转换为二进制时会出现无限循环的情况,比如0.825转换为二进制就是0.1101001100110011001100110011001100110011001100110011无限循环的情况

二进制转换为十进制

转10进制正整数

二进制转为十进制要从右到左用二进制的每个数去乘以2的相应次方。

如果首位是0就表示正整数,如果首位是1则表示负整数,正整数可以直接换算,负整数则需要先取反再换算。

计算机内部表示数的字节单位是定长的。如8位、16位、32位。所以位数不够时,高位补零。

比如想二进制01101010转为十进制,因为以0开头,所以这是正整数,计算如下所示:

(0 * 2的零次方) + (1* 2的一次方)+ (0 * 2 的二次方)+(1 * 2的三次方) +(0 * 2的四次方) +(1* 2的五次方) + (1 * 2的六次方) + (0 * 2的7次方) = 0 + 2 + 0 + 8 + 0 + 32 + 64 + 0 = 105

转10进制负整数

二进制转为十进制要从右到左用二进制的每个数去乘以2的相应次方

比如11101011想转为负的十进制,因为最高位是1。

  • 先减1等于11101010
  • 取反00010101
  • 然后计算出00010101对应的十进制为21
  • 所以11101011最终对应的十进制为 -21。

转10进制小数

二进制转为十进制要从左到右用二进制的每个数去乘以2的相应次方。

比如0.11想转为负的十进制。

(1 * 2的负一次方) + (1* 2的负二次方) = 0.5 + 0.25 = 0.75

比如10.11想转为负的十进制。

整数部分(0 * 2的零次方) + (1* 2的一次方)= 0 + 2 = 2

小数部分(1 * 2的负一次方) + (1* 2的负二次方) = 0.5 + 0.25 = 0.75

合并为2.75, 所以二进制的10.11转为10进制为2.75

你可能感兴趣的:(Java,数据结构,算法,java)