美文网首页
十进制转换为二进制

十进制转换为二进制

作者: 清水秋香 | 来源:发表于2020-02-20 19:05 被阅读0次
  • 十进制转换为二进制
    ❖ 二进制是计算机原理中最基本的概念,作为组成 计算机最基本部件的逻辑门电路,其输入和输出 均仅为两种状态:0和1
    ❖ 但十进制是人类传统文化中最基本的数值概念, 如果没有进制之间的转换,人们跟计算机的交互 会相当的困难
    ❖ 我们经常需要将整数在二进制和十进制之
    间转换
    如:(233)10的对应二进制数为(11101001)2, 具体是这样:
    (233)10=2×102+3×101+3×100
    (11101001)2=1×27+1×26+1×25+0×24+1×23 +0×22+0×21+1×20
    十进制转换为二进制
    ❖ 十进制转换为二进制,采用的是“除以2 求余数”的算法
    将整数不断除以2,每次得到的余数就是由低到 高的二进制位


    二进制转换.png

    十进制转换为二进制
    ❖ “除以2”的过程,得到的余数是从低到 高的次序,而输出则是从高到低,所以需 要一个栈来反转次序

from pythonds.basic.stack import Stack

def divideBy2(decNUmber):
    remstack = Stack()
    while decNUmber > 0:
        rem = decNUmber % 2   #求余数
        remstack.push(rem)    #将余数存进栈中
        decNUmber = decNUmber // 2  #整数除
    binString = ""
    while not remstack.isEmpty():
        binString = binString + str(remstack.pop())
    return binString

#传入常用的10进制数,他会转换为二进制数。
print(divideBy2(42))

扩展到更多进制转换
❖ 十进制转换为二进制的算法,很容易可以 扩展为转换到任意N进制
只需要将“除以2求余数”算法改为“除以N求余 数”算法就可以
❖ 计算机中另外两种常用的进制是八进制和 十六进制
(233)10等于(351)8和(E9)16
(351)8=3×82+5×81+1×80
(E9)16=14×161+9×160
扩展到更多进制转换
❖ 主要的问题是如何表示八进制及十六进制 二进制有两个不同数字0、1
十进制有十个不同数字0、1、2、3、4、5、6、 7、8、9
八进制可用八个不同数字0、1、2、3、4、5、6 、7
十六进制的十六个不同数字则是0、1、2、3、4 、5、6、7、8、9、A、B、C、D、E、F

  • 十进制转换为十六以下任意进制:代码
from pythonds.basic.stack import Stack
def baseConverter(decNumber,base):
    digits = '0123456789ABCDEF'
    remstack = Stack()

    while decNumber > 0:
        rem = decNumber % base
        remstack.push(rem)
        decNumber = decNumber // base
    newString = ""
    while not remstack.isEmpty():
        #pop出来的是数字 会对应的去digits中取
        newString = newString + digits[remstack.pop()]
    return newString
print(baseConverter(25,2))
print(baseConverter(233,16))

相关文章

网友评论

      本文标题:十进制转换为二进制

      本文链接:https://www.haomeiwen.com/subject/zmffqhtx.html