掌握 Python 栈,轻松实现进制转换

提交者
• 阅读 126

大家好,我是涛哥,本文内容来自 涛哥聊Python ,转载请标原创。

栈(Stack)是计算机科学中常用的数据结构,具有众多实际应用。其中之一是使用栈来实现进制转换,将一个数字从一种进制表示转换为另一种进制表示。本文将深入研究栈的原理,以及如何使用Python实现十进制到二进制、八进制和十六进制的进制转换。我们将提供详细的解释和多个示例,帮助您深入理解这一概念。

了解进制转换

在计算机科学和数学中,进制是一种表示数字的方式,它决定了一个数字的基数和表示规则。最常见的进制包括:

  • 十进制(Decimal):基数为10,使用0-9这10个数字表示。
  • 二进制(Binary):基数为2,使用0和1表示。
  • 八进制(Octal):基数为8,使用0-7表示。
  • 十六进制(Hexadecimal):基数为16,使用0-9和A-F表示。

每种进制都有其独特的特点和应用场景。进制转换是将数字从一种进制表示转换为另一种进制表示的过程。在接下来的部分,我们将重点关注如何将十进制数转换为其他进制。

进制转换原理

进制转换的核心原理涉及到除法和取余操作。具体步骤如下:

  1. 从十进制数的最右边开始,连续进行除法和取余操作。
  2. 将每次取得的余数存储起来,它们构成了新进制下的数值。
  3. 将商作为下一轮的被除数,直到商为0为止。
  4. 将存储的余数按照相反的顺序排列,得到新进制的表示。

让我们以一个示例来说明如何将十进制数转换为二进制。

示例1:十进制到二进制

我们以十进制数 233 为例,将其转换为二进制。

  1. 用 2(二进制的基数)除以 233,得到商 116 和余数 1。
  2. 然后,将商 116 除以 2,得到商 58 和余数 0。
  3. 继续这个过程,直到商为 0。
  4. 最后,将所有的余数从下往上排列,得到二进制表示为 11101001。

这个转换过程可以轻松地使用栈来实现。

使用栈进行进制转换

栈是一种理想的数据结构,用于实现进制转换。我们可以将每次的余数推入栈中,然后按相反的顺序从栈中弹出这些余数,从而获得正确的进制表示。以下是使用Python栈实现十进制到二进制转换的示例代码:

class Stack:
    def __init__(self):
        self.items = []

    def is_empty(self):
        return len(self.items) == 0

    def push(self, item):
        self.items.append(item)

    def pop(self):
        if not self.is_empty():
            return self.items.pop()

    def peek(self):
        if not self.is_empty():
            return self.items[-1]

    def size(self):
        return len(self.items)

def decimal_to_binary(decimal_num):
    stack = Stack()  # 创建一个空栈,用于存储余数

    while decimal_num > 0:
        remainder = decimal_num % 2  # 计算余数
        stack.push(remainder)  # 将余数推入栈中
        decimal_num = decimal_num // 2  # 更新商

    binary_str = ""
    while not stack.is_empty():
        binary_str += str(stack.pop())  # 弹出栈中的余数,构建二进制字符串

    return binary_str

让我们测试一下这个函数:

print(decimal_to_binary(233))  # 输出:'11101001'

这个函数使用栈来存储余数,并将它们按照正确的顺序弹出以构建二进制表示。这个方法可以用于任何十进制到二进制的转换。

示例2:十进制到八进制

现在,让我们来看一个将十进制数转换为八

进制的示例。我们只需稍微修改上面的代码,将基数从2改为8:

def decimal_to_octal(decimal_num):
    stack = Stack()  # 创建一个空栈,用于存储余数

    while decimal_num > 0:
        remainder = decimal_num % 8  # 计算余数
        stack.push(remainder)  # 将余数推入栈中
        decimal_num = decimal_num // 8  # 更新商

    octal_str = ""
    while not stack.is_empty():
        octal_str += str(stack.pop())  # 弹出栈中的余数,构建八进制字符串

    return octal_str

让我们测试这个函数:

print(decimal_to_octal(233))  # 输出:'351'

同样,我们只需将基数修改为16,即可实现十进制到十六进制的转换。

进制转换的应用

进制转换不仅仅是一个有趣的数学概念,它在计算机科学和计算机编程中也有重要的应用。以下是一些应用示例:

  1. 计算机内存管理: 计算机内存中的数据通常以二进制形式存储。进制转换用于查看和理解内存中的数据。
  2. 网络通信: 数据在计算机网络中以二进制传输。进制转换有助于理解和解析网络数据包。
  3. 图像处理: 图像的像素值通常以不同的进制表示,进制转换可用于修改图像的颜色深度等。
  4. 编程: 程序员可能需要在不同的进制之间进行转换,以便理解和调试程序中的数据。
  5. 密码学: 加密和解密算法中使用了不同进制的数学操作,包括二进制和十六进制。

进制转换是计算机科学中的一个基本概念,深入了解它将有助于更好地理解计算机系统的内部工作原理。

结论

栈是一个强大的数据结构,用于实现进制转换等许多问题。通过深入理解栈的工作原理,您可以更好地理解它的应用,包括计算机内存管理、编程、网络通信等领域。

进制转换不仅仅是一个有趣的数学概念,它在计算机科学和编程中有重要的应用。了解如何使用栈来实现进制转换将帮助您更好地理解计算机内存管理、网络通信、图像处理和编程中的数据表示。

点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
4年前
Python 练手 "小例子" 闯关60题!
一、数字1求绝对值绝对值或复数的模In1:abs(6)Out1:62进制转化十进制转换为二进制:In2:bin(10)Out2:'0b1010'十进制转换为八进制:In3:oct(9)Out3:'0o11'十进制转换为十六进制:In4:hex(15)Out4:'0xf'3整数和ASCII互
Irene181 Irene181
4年前
一篇文章带你弄懂Python基础之进制和数据类型
大家好,我是Go进阶者,今天给大家分享一些Python基础(进制和数据类型),一起来看看吧一、进制1、什么是进制?进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tallymark计数)。对于任何一种进制X进制,就表示每一位置上的数运算时都是逢X进一位。十进制是逢十进
Wesley13 Wesley13
3年前
java(十一)数组
数组用来存放相同数据类型的数据,逻辑位置与物理位置都是连续的。数组存放在堆里。栈和堆:栈:方法调用的时候使用栈,局部变量存放在栈里。堆:动态的分配内存,new出来的。引用类型存放在堆里,在栈里存放引用,也就是地址,一般用16进制来表示地址:0x...。基本类型和引用类型的区别:基本类型:在栈中存放的是二进制位。引用
DaLongggggg DaLongggggg
4年前
python刷题-进制转换
十六进制转八进制问题描述  给定n个十六进制正整数,输出它们对应的八进制数。输入格式  输入的第一行为一个正整数n(1<n<10)。  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式  输出n行,每行为输入对应的八进制正整数。  【注意】  输入的十六进制数不会有
Wesley13 Wesley13
3年前
JS中二进制与十进制的相互转换
今天在做题目的时候遇到了需要十进制转换为二进制,这个我知道用toString可以,但是二进制转换为十进制我一下子就想不起来,网上搜了下,才知道是parseInt可以实现,特此记录下。十进制转换为二进制:varnum100;console.log(num.toString(2));toString()方法可把一个
Easter79 Easter79
3年前
TypeScript 基本类型(一)
1、boolean布尔值true/falseletisDone:booleanfalse;2、number数字:和JavaScript一样,TypeScript里的所有数字都是浮点数。另外支持二进制,八进制,十进制,十六进制。letdecLiteral:number6;lethex
Stella981 Stella981
3年前
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
↓2进制8进制10进制16进制2进制\bin(int(x,8))bin(int(x,10))bin(int(x,16))8进制oct(int(x,2))\oct(int(x,10))oct(int(x,16))10进制int(x,2)int(x,8)\int(x
Wesley13 Wesley13
3年前
C++ 进制转换 十进制十六进制八进制二进制相互转换
思路:1.下面我把相互转换的所有类型都写出来了。实际上都是通过十进制中转的,这样比较简单,写出X进制转成十进制和从十进制转成X进制的两份代码直接拷贝就完成了剩余的部分。哦,对,自己封装了一个charToDigit函数,主要是将字符转为数字用的。2.十六进制转十进制转八进制:!(https://images2018.cnblogs.c
Wesley13 Wesley13
3年前
JAVA入门基础
数学中,没有办法用十进制来精确表达1/3.同样的,计算机中,没有办法用二进制表示0.1比如:python中,java中都是一样的。a6.0b4.9ab1.0999999999999996x3.0y2.9xy0
绣鸾 绣鸾
1年前
科学计算器Mac版PCalc
是一款全功能的科学计算器,它具有以下特点:支持十六进制、八进制和二进制计算,以及可选的RPN模式、括号、可编程函数和一组广泛的单位转换。科学家、工程师、学生、程序员或任何正在寻找功能丰富的计算器的人的强大选择。具有强大的菜单栏小部件,无需离开当前应用程序即
贾蔷 贾蔷
3星期前
手把手教你实现进制转换(C++代码注释+小白友好教程)
一、简介和特点是编程中常见的操作,即将数值从一种进制(如十进制)转换为另一种进制(如、十六进制等)。本了一个通用的进制转换工具,具有以下特点:1.支持小数转换:不仅能转换整数,还能处理小数部分的进制转换(如将0.25转换为二进制)。2.灵活进制设定:用户可