-
十进制转换为二进制
❖ 二进制是计算机原理中最基本的概念,作为组成 计算机最基本部件的逻辑门电路,其输入和输出 均仅为两种状态: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))
网友评论