Python中整数的二进制表示

Python中整数的二进制表示

Photo by 亚历山大·辛恩 on 不飞溅

您可能听说过二进制。二进制前缀为 双, 这意味着两个。那么它到底是什么?本文首先将二进制与另一个数字系统进行比较,然后再分解二进制数字系统的核心概念,从而解释什么是二进制。

文章结构

  1. 了解 base-10
  2. 计算机环境中的二进制
  3. 二进制编号系统
  4. 二元逻辑运算符
  5. 将整数转换为二进制
  6. 简单的任务

了解 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 .

二进制数通常用 01. 这些值对应于开关的状态,如前所述,其中 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 中进行转换:

  1. 垃圾桶()
  2. 格式()
  3. 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 的出现次数。

关于我:

网站 | GitHub | 推特 | 领英 | 斯特拉瓦

目前,我正在提高 Python 和 Flask 的技能。你可以在我的网站和 GitHub 上看到我在做什么。

为了保持身体活跃,我参加了简单的锻炼课程。我参加 Strava 上的社区活动。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/7798/18440110

posted @ 2022-09-01 10:20  哈哈哈来了啊啊啊  阅读(870)  评论(0编辑  收藏  举报