暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python 进制转换

心在远方AND走在路上 2021-08-19
605

进制转换:

      进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。

       接下来我先介绍用传统数学方法,再介绍用python内置方法


二进制转十进制:

1101 转为十进制 1*2^(4-1)+1*2^(3-1)+0*2^(2-1)+1*2^(1-1) 即各个位拆开,乘以2的(位数-1)次方,结果为13

    >>> int('1101',2) 
    13
    >>> int('0o226',8) #00226 0:阿拉伯数字零 o:小写英文字母 o 226:八进制数
    150
    >>> int('0x96',16)
    150


    同理可得:把八进制、十六进制数按权展开、相加即得十进制数。

    十进制转二进制:

    比如13 用13除以2,得到的商再除以2 直到除到1,然后记录每次得到的余数, 从后往前读,即为 1101

    同理可得,十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止,再从最后一位读到第一位

      >>> bin(13)
      '0b1101'


       

       

      八进制转为二进制:

      比如八进制数 (37)8

      拆开 3   7     

      3用二进制表示为 11                           

      7用二进制表示为 111                       

      合起来 即为 11 111

      同理 十六进制转二进制

        >>> bin(0o37)    #0o37   0:阿拉伯数字0   o:八进制表示
        '0b11111'
        >>> bin(0x33)
        '0b110011'
        >>>


         

        二进制转八进制:

        二进制从右边数,3位3位为一组,转为十进制比如:

        10 110 011 111

        2     6    3      7    对应八进制就是为 (2637)8

        同理十六进制,不过此时二进制应该是 从右往左边数,4位4位为一组

          >>> oct(0b10110011111)
          '0o2637'
          >>> hex(0b10110011111)
          '0x59f'


          101 1001 1111    转为十六进制对应如下:

          5         9     f (15)

           

          八进制与十六进制之间的转换有两种方法:

          第一种:他们之间的转换可以先转成二进制然后再相互转换。

          第二种:他们之间的转换可以先转成十进制然后再相互转换。

            >>> oct(0x37)
            '0o67'
            >>> hex(0o67)
            '0x37'


             

             

             

             

            权值和第几位相关,n进制第i位的权值是n的(i-1)次方。

            例如:

            十进制13579,常说的百位是5,其背后的理由是10^(3-1)=100

            十六进制1A2B,B所处位的权值是16^(1-1)=1(即个位),1所处位的权值是16^(4-1)=4096

             

            对于多位数,处在某一位上的“l”所表示的数值的大小,称为该位的位权。例如十进制第2位的位权为10,第3位的位权为100;而二进制第2位的位权为2,第3位的位权为4,对于 N进制数,整数部分第 i位的位权为N^(i-1),而小数部分第j位的位权为N^-j。


            算法题学习:

            题目:二进制求和:

            给你两个二进制字符串,返回它们的和(用二进制表示)。

            输入为 非空 字符串且只包含数字 1 和 0。

            示例 :


            输入: a = "1010", b = "1011"

            输出: "10101"

            提示:

            每个字符串仅由字符 '0' 或 '1' 组成。

            1 <= a.length, b.length <= 10^4

            字符串如果不是 "0" ,就都不含前导零。


            代码解答一:

              class Solution:
                  def addBinary(self, a, b):
              r, p = '', 0
              d = len(b) - len(a)
              a = '0' * d + a
              b = '0' * -d + b for i, j in zip(a[::-1], b[::-1]):
              s = int(i) + int(j) + p
              r = str(s % 2) + r
              p = s 2
              return '1' + r if p else r


              代码解答二:

                class Solution:
                def addBinary(self, a: str, b: str) -> str:
                return bin(int(a, 2)+int(b, 2))[2:]





                文章转载自心在远方AND走在路上,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论