回顾💫 上节我们学习了栈的应用1---括号的匹配,如果有遗忘或者感兴趣的小伙伴可以点击👉链接🔗http://t.csdnimg.cn/2ba3D
二进制 是计算机原理最基本的概念, 作为组成计算机最基本部件的逻辑门电路,其输入和输出均仅为两种状态: 0 和 1
但十进制是人类传统文化最基本的数值概念,如果没有进制之间的转换,人们跟计算机的交互会相当困难
class Stack:#Stack---->ADT
def __init__(self):
self.items =[]
def isEmpty(self):
return self.items == []
# 满足这些属性(行为)的是栈
def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
#
def size(self):
return len(self.items)
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
print(divideBy2(254))
运行结果:
从上面的十进制转二进制我们可以拓展到更多的进制转换
十进制转换为二进制的算法, 很容易可以拓展到转换到任意N进制
只需要将 "除以2求余数" 算法改为 "除以N求余数"算法即可
计算机中另外常用的两种进制 : 八进制和十六进制
如何表示八进制和十六进制
十进制转换为十六以下任意进制:代码
class Stack:#Stack---->ADT
def __init__(self):
self.items =[]
def isEmpty(self):
return self.items == []
# 满足这些属性(行为)的是栈
def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
#
def size(self):
return len(self.items)
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():
newString = newString + digits[remstack.pop()]
return newString
print(baseConverter(25,2))
print(baseConverter(25,16))
运行结果: