• 进制与转换


    进制与转换

    1、为什么要使用进制数?

    数据在计算机中的表示,最终以二进制的形式存在,就是像<黑客帝国>电影中那些0101010...的数字。

    我们操作计算机,实际就是使用程序和软件在计算机上各种读写数据。

    如果我们直接操作二进制的话,面对这么长的数进行思考或操作,没有人会喜欢。

    用16进制或8进制可以解决这个问题。

    因为,进制越大,数的表达长度也就越短。

    之所以使用16或8进制,而不其它的,诸如9或20进制。是因为2、8、16, 分别是2的1次方、3次方、4次方。 这一点使得三种进制之间可以非常直接地互相转换。

    8进制或16进制既缩短了二进制数,还能保持了二进制数的表达特点。转换还方便。

    现在2进制、16进制比较常见,8进制在逐渐淘汰。

    2、进制的介绍

    • 10进制
      我们最熟悉的10进制,就是用0~9的数表示逢10进1
    • 16进制
       如果是16进制,它就是由0-9,A-F组成,与10进制的对应关系是:0-9 对应0-9;A-F对应10-15。(字母不区分大小写)
    • 2进制和8进制 
      2进制由0和1组成,逢2进1,例如2进制数:10,用10进制表达为:2
      8进制由0~7组成,逢8进1,例如8进制数:10,用10进制表达为:8
    二进制数,前缀是0b;八进制数,前缀是0o;十六进制数,前缀是0x

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

    3.1、十进制转二进制

    方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。

    3.2、二进制转十进制 

    方法一为:把二进制数按权展开、相加即得十进制数。

     

    方法二:举证,把最高位逐一往低位强行进行降位。

     

    (额,图片丑了点,嘿嘿)

    3.3、十进制小数转二进制

    十进制小数转换成二进制小数采用 “乘2取整,顺序排列” 法。具体做法是:

    用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。

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

    4、二进制与十六进制之间的转换

    4.1、二进制转十六进制

    方法:十六进制是取四合一,从右往左,每4个一组提出来,用二进制转十进制方法进行转换,最后连接每组。

    注意事项:4位二进制转成十六进制是从右到左开始转换,不足时补0。最右边数0-9 对应0-9;A-F对应10-15。

    4.2、十六进制转二进制

    方法:十六进制也是取一分四,从右往左,每4个一组提出来,用十进制转二进制方法进行转换,最后连接每组。

    5、补码

    正数的补码和它的原码的形式是相同的。

    负数的补码形式:将该数值的绝对值的二进制形式,按位取反为反码后,再加1。

    为什么使用补码的形式来将数据存放在计算机底层

    使用补码,就可以把减法运算转换为加法,也就是说在计算机底层本质上没有减法是硬件实现,都是加法,降低硬件的设计难度,易于实现!

    分析-下为什么用补码:

    假设字长为8blts

    完成 1-1 =0:

    1 - (1)
    = 1 + (-1)
    = (00000001) + (10000001) --------原码计算
    = (10000010)
    = (-2 )

    完成 1-2 =-1:

      1 - 2= 1 + (-2)
    = (0000001) + (10000010) -------原码计算
    = (10000011)
    = (-3)

    显然使用原吗计算时减法时,结果不对。

    那使用反码呢?

    完成 1-1 =0:

      1 - 1
    = 1 + (-1) = (00000001)+ (1111110) ---反码计算 = (11111111) = (10000000) ---转换原码 = (-0) ---有问题

    完成 1-2 =-1:

      1 - 2
    = 1
    + (-2) = (00000001) + (11111101) ---反码计算 = (11111110) = (10000001) ---转换原码 = (-1) ---正确.

    问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的,于是就引入了补码概念。

    负数的补码

    负数的补码就是对反码加1,而正数不变,正数的原码反码补码是一样的。

    (-1) = (10000001)原码 = (11111110)反码 = ((11111110) + 1)补码

    下面是补码的运算:

    完成 1-1 =0:

      1 - 1
    = 1 + (-1)
    = (00000001)补 + (11111111)补 即:(11111110)+1)(反码加1)
    = (00000000)补
    = (00000000)原
    = 0 ---正确

     完成 1-2 =-1:

      1 - 2
    = 1 + (-2)
    = (00000001)补+ (11111110)补
    = (11111111)补
    = (-1 ) ---正确

    补码的设计目的是:

    使符号位能与有效值部分一起参加运算,从而简化运算规则

    使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计,所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码

  • 相关阅读:
    Python面向对象编程及内置方法
    【笨嘴拙舌WINDOWS】SetCapture和ReleaseCapture
    【转】获取屏幕分辨率及大小相关
    【笨嘴拙舌WINDOWS】实践检验之剪切板查看器【Delphi】
    【笨嘴拙舌WINDOWS】剪切板
    【笨嘴拙舌WINDOWS】计时器精度
    【笨嘴拙舌WINDOWS】实践检验之按键精灵【Delphi】
    【笨嘴拙舌WINDOWS】键盘消息,鼠标消息
    【笨嘴拙舌WINDOWS】GDI绘制区域
    【笨嘴拙舌WINDOWS】实践检验之GDI缩放
  • 原文地址:https://www.cnblogs.com/beimingdaoren/p/12771047.html
Copyright © 2020-2023  润新知