用python将十进制数转换成二进制数_python中的数据结构-将十进制数转换为二进制数...

二进制表示法在计算机科学中很重要,计算机中存储的所有值都以一串二进制数字,即0和1的形式存在。 如果无法在通用表示形式和二进制数字之间来回转换,我们将需要以非常奇怪的方式与计算机进行交互。

十进制的数字如何转换成二进制的,举几个例子就明白了:图片来自https://www.geeksforgeeks.org/program-decimal-binary-conversion/

将17作为被除数,除以2,每次所得的余数有两种可能,0或者1. 最后将余数从先到后依次排列,即得到二进制代表的数。最高次的为MSB,最低次的为LSB. 图片来自https://www.geeksforgeeks.org/program-decimal-binary-conversion/

References:https://www.electronics-tutorials.ws/binary/bin_2.html​www.electronics-tutorials.ws

As the decimal number is a weighted number, converting from decimal to binary (base 10 to base 2) will also produce a weighted binary number with the right-hand most bit being the Least Significant Bit or LSB, and the left-hand most bit being the Most Significant Bit or MSB, and we can represent this as:

由于十进制数是一个加权数,因此从十进制到二进制(从10到2)的转换也将产生一个加权的二进制数,其中最右边的位是最低有效位LSB,而最左边的位 是最高有效位或最高有效位,我们可以将其表示为MSB.

两个网站详细介绍转换过程:https://www.wikihow.com/Convert-from-Decimal-to-Binary​www.wikihow.comBase Conversion Tool​www.mathsisfun.com

但是,我们如何轻松地将整数值转换为二进制数呢? 答案是用“除以2”的算法,该算法使用堆栈来跟踪二进制结果的数字。

思路:图片来自http://www.pas.rochester.edu/~rsarkis/csc162/_static/lectures/Stacks.pdf

二进制算法:假定我们以大于0的整数作为开始的数字。

然后,将十进制数连续除以2,并记录余数。

第一次除以2可得到值是偶数还是奇数的信息。

-----偶数值的余数为0。它的一位数字为0。

-----奇数值将为1的余数,而数字1则为一位。

将二进制数构建为数字序列:第一个余数实际上是序列中的最后一位,最后一个余数是序列中的第一位。

我们再次看到了反转属性,表明堆栈很可能是解决问题的适当数据结构。

下面的Python代码实现了2分算法。

函数divide_by_2将一个十进制数的参数并将其重复除以2。

第 行使用内置的模运算符%提取余数,然后第 行将其加入堆栈。

在除法过程达到0之后,将在第-行中构造一个二进制字符串。

第 行创建一个空字符串。 二进制数字一次从堆栈中弹出,并附加到字符串的右端。 然后返回二进制字符串。

二进制转换算法可以轻松扩展,以针对任何基数执行转换。 计算机科学使用许多不同的编码。 其中最常见的是二进制,八进制(基数8)和十六进制(基数16)。

当我们超出基数10时,不能再简单地使用余数了,因为它们本身被表示为两位十进制数。相反,我们需要创建一组数字来表示超出9的那些余数。解决此问题的方法可以将数字集扩展为包括一些字母字符。例如,十六进制将十个十进制数字与前十六个字母字符一起用于16个数字。为实现此目的,将创建一个数字字符串,将数字存储在其相应位置。 0在位置0,1在位置1,A在位置10,B在位置11,依此类推。从堆栈中除去余数时,可以将其用于索引数字字符串,并且可以将正确的结果数字附加到答案中。

你可能感兴趣的:(用python将十进制数转换成二进制数_python中的数据结构-将十进制数转换为二进制数...)