Python中整数的二进制表示
Python中整数的二进制表示
您可能听说过二进制。二进制前缀为 双, 这意味着两个。那么它到底是什么?本文首先将二进制与另一个数字系统进行比较,然后再分解二进制数字系统的核心概念,从而解释什么是二进制。
文章结构
- 了解 base-10
- 计算机环境中的二进制
- 二进制编号系统
- 二元逻辑运算符
- 将整数转换为二进制
- 简单的任务
了解 base-10
我们中的许多人(如果不是全部)都从 0 到 9 数过数字。它们用于定义以 10 为底的编号系统。更简单地说,base-10 是我们根据位置为数字分配位置值的方式。位置或位置基于 10 的幂。每个数字位置是其右侧数字值的 10 倍。
例如,以 10 为底的数字 234 将分解如下:
- 2 = 2*10 ** 2
- 3 = 3*10 ** 1
- 4 = 4*10 ** 0
人类学家认为,以 10 为基数的编号系统的出现是因为人类有 10 根手指。尽管在计算机的背景下,它们只有“一个”手指,因为它们是电机。让我进一步解释一下。
我们在日常生活中与电互动,例如在开灯或关灯时。开关有两种状态:开或关。我们说,如果有电流通过,开关就打开,如果没有电流通过,它就关闭。
计算机环境中的二进制
计算机的大脑是它的 CPU(中央处理单元)。简单来说,CPU只不过是一系列连接的电开关。
一个开关产生两种状态,即开和关。如果您有两个开关,则生成的状态数为四个:
- 开-开
- 开关
- 关-开
- 关-关
如果开关的数量是三个,那么导出的状态总数将是八个。
- 开-开
- 开关
- 关-开
- 关-关
- 开-开
- 开关
- 关-开
- 关-关
换句话说, n
开关可以计数 2**n
价值观。如果您有 10 个开关,那么值的数量将是 2**10
.
据说大多数现代计算机是 32 位处理器 .这意味着内部计数器由 32 个开关组成,每个开关最多可以计数 2**32
(如果你做数学,大约 43 亿)。
二进制编号系统
二进制编号系统的工作方式类似于十进制(或以 10 为基数)系统。以 10 为底,前 10 个数字是 0、1、2、3、4、5、6、7、8、9。在 9 之后,引入十位。例如,数字 10 是 1 * 10**1
. 90 个这样的值可用于十位。在数百个中,诸如 121 之类的数字相当于 1*10**2 + 2*10**1 + 1*10*0
.
二进制数通常用 0 和 1. 这些值对应于开关的状态,如前所述,其中 0 表示关闭,1 表示计算机内部硬件组件的打开。
通常,要以二进制表示一个数字,它需要不止一个 0 和一个 1。让我们取二进制数 10011010010 举个例子 . 什么 __ 数字代表什么?
- 1 = 1*2**10
- 0 = 0*2**9
- 0 = 0*2**8
- 1 = 1*2**7
- 1 = 1*2**6
- 0 = 0*2**5
- 1 = 1*2**4
- 0 = 0*2**3
- 0 = 0*2**2
- 1 = 1*2**1
- 0 = 0*2**0
将所有这些操作加在一起,我们将得到:
$蟒蛇3 >>> 1*2**10 + 0*2**9 + 0*2**8 +1*2**7 + 1*2**6 + 0*2**5 + 1*2** 4 + 0*2**3 + 0*2**2 + 1*2**1 + 0*2**0 # 输出
1234
换句话说,二进制 10011010010 代表数字 1234。如果你觉得用 ** 来表示幂比较麻烦,你也可以使用 1 * pow(2, 10)
.
通常,二进制数最好限制为一个字节,其中一个字节相当于 8 位。这没有技术原因,尽管从硬件设计的角度来看,当比特数是 2 的幂时会容易得多。
二元逻辑运算符
就像小数一样,二进制数可以加、减、乘和除。存在的每个计算设备都有一个专用电路,称为 算术逻辑单元 其唯一目的是以二进制形式输入并输出对这些数字的运算结果。
AND 运算符
AND 运算符是 Python 中的逻辑运算符,用 & 符号表示(即 _ &_ )。如果两个语句都为真,则它用于返回 TRUE。
$蟒蛇3 >>> x = 1
>>> x < 5 和 x > 0 # 输出
真的
x 的值确实是 __ 比...更棒 0 但小于 5 .
在位级别,如果两个位都为 1,AND 运算符将返回 1。如果任一位为 0,AND 运算符将返回 0。
x 为 ON 且 Y 为 ON 返回 1。如果 x 为 ON 且 y 为 OFF,则返回 OFF。如果 x 为 OFF 而 y 为 ON,它将返回 OFF。 (记住 ON 用 1 表示,而 OFF 用 0 表示)
# 示例操作
10101101 (173)
& 01101011 (107)
________
00101001 (41)
在上面显示的示例中,我们使用 AND 运算符匹配位。
OR 运算符
OR 运算符由竖线符号表示(即 | ) 按位。 如果任一操作数为真,则它用于返回真。
$蟒蛇3 >>> x = 5
>>> x < 5 或 x == 5 # 输出
真的
在位的上下文中,如果 X 开启或 是的 关闭,然后 X 或者 是的 开启。如果两者 X 或者 是的 为 ON,则 X 或者 是的 开启。如果两者 x 或 是的 是 关,然后 X 或者 是的 已关闭。
# 示例操作
10101101 (173)
| 01101011 (107)
________
11101111 (239)
请注意,输入和输出之间没有关系。
NOT 运算符
该运算符反转结果。在结果为 0 的情况下,NOT 运算符将反转它,它将变为 1。反过来也是如此:1 变为 0。
$python3 >>> x = 5
>>> x != 5 # 输出
错误的
在上面的例子中,我们知道 X 等价于 5. 比较运算符 != 反转或否定结果。
XOR 运算符
也被称为 异或(XOR), 如果两个位都为 1,则此操作将返回 0。它由插入符号表示(即 ^ )
# 示例操作
10101101 (173)
^ 01101011 (107)
________
11000110 (198)
将整数转换为二进制
现在我们对二进制是什么有了深入的了解,让我们看看如何将整数转换为其等效的二进制表示。我们已经在前面的章节中看到了如何做到这一点。例如,数字 1234 将是 10011010010。 我们通过执行以下操作得出了这个答案:
1*2**10 + 0*2**9 + 0*2**8 +1*2**7 + 1*2**6 + 0*2**5 + 1*2**4 + 0 *2**3 + 0*2**2 + 1*2**1 + 0*2**0
那么,我们首先是如何获得二进制数的呢?有几种方法可以在 Python 中进行转换:
垃圾桶()
格式()
- f 字符串或字符串格式
使用 **垃圾桶()**
功能
这 垃圾桶 是二进制的缩写。它用于将整数转换为二进制字符串。
$蟒蛇3 >>> 垃圾箱(1234) # 输出
'0b10011010010'
此函数通常预先设置 0b。 它也接受负整数。
$蟒蛇3 >>> 仓(-1234) # 输出
'-0b10011010010'
通过在二进制数的开头加上负号,我们知道整数是负数。
使用 **格式()**
功能
此函数接受一个值加上格式规范,在本例中为“b”。
$蟒蛇3 >>> my_negative_number = -1234
>>> my_positive_pos_number = 1234 >>> 格式(my_negative_number,'b')
'-10011010010' >>> 格式(my_positive_pos_number,'b')
'10011010010'
通常你不会得到 0b 添加到输出的开头,就像 垃圾桶()
.
字符串格式化和 f 字符串
格式化字符串时,您可以自由定义要包含在输出中的选项。
$蟒蛇3 >>> '{0:b}'.format(1234)
'10011010010'
0 将被参数中的参数动态替换 格式()
.这 b 定义您希望如何进行转换,在这种情况下,它将是二进制的。
从 Python3.6 开始,一种更现代的格式化字符串的方法是使用“格式化字符串文字”,也称为 f弦 .它们不仅比其他格式化方式更易读、更简洁、更不容易出错,而且速度也更快!
$蟒蛇3 >>> f'{0:b}'
'10011010010'
简单任务
现在您已经知道如何使用 Python 将整数转换为其二进制表示,尝试创建一个将整数作为输入的函数,将其转换为二进制,并打印出值 0 的出现次数。
关于我:
目前,我正在提高 Python 和 Flask 的技能。你可以在我的网站和 GitHub 上看到我在做什么。
为了保持身体活跃,我参加了简单的锻炼课程。我参加 Strava 上的社区活动。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明