我想知道“+”运算符在python中是如何工作的,或者实际上任何基本算术运算符是如何工作的。关于这个主题我的知识非常有限,所以我希望这不是这里已经存在的问题的重复。
更具体地说,我想知道这段代码如何:
a = 5
b = 2
c = a + b
print (c)
运行时,产生c = 7的结果。计算机如何执行此操作?我在Reddit上发现了一个线程,解释了计算机如何以二进制(https://www.reddit.com/r/askscience/comments/1oqxfr/how_do_computers_do_math/)执行计算,这是我能理解的。然而,我无法理解的是计算机如何知道如何将5和2的值转换为二进制,然后执行计算。对于所有整数或基数为10的数字,是否有一套公式?或者在这里更深层次的硬件层面还有其他事情发生了吗?
我再次感到抱歉,如果这是一个重复,或者如果问题看起来完全是愚蠢的,我似乎无法理解python如何接受任何两个数字然后对它们求和,添加它们,除以它们或乘以它们。欢呼声。
答案 0 :(得分:1)
很酷的问题。
首先,我认为您不能输入a + b = c
。它宁愿是c = a + b
。
当计算机计算出来时,它首先将2和5转换为二进制。因此2给出10,而5给出101.
这两个二进制数的添加方式与添加任意两个十进制数的方式相同,结果为111,然后将其转换回基数为10。
答案 1 :(得分:0)
数字始终为二进制。计算机只是不能保持不同的数字系统(嗯,有三元计算机,但这是一个罕见的例外)。十进制系统仅用于“人类表示”,因此更容易阅读,但所有符号(包括文件中的符号"5"
,它只是一个字符)通过某些编码映射到数字(例如ASCII)。这些数字当然是二进制的,只是计算机知道(通过编码规范)如果在某些字符串的上下文中有1000001
,它必须显示符号{{1} (在ASCII的情况下)。就是这样,计算机不知道数字58,因为它只是两个符号,并且作为1和0保存在内存中。
现在,记忆。这是它变得有趣的地方。所有指令和数据都保存在一个地方,作为1和0的大缓冲区。这些传递给CPU(使用其指令集)知道第一块1和0(这就是我们称之为“字”)的含义。第一个词是指令,然后是参数。根据指令,会发生不同的事情。好的,如果指令意味着“添加这两个数字”并将结果存储在这里会发生什么?
好吧,现在这是一项硬件工作。添加二进制数并不复杂,在您提供的链接中对此进行了解释。但CPU如何知道这是算法以及如何执行它?好吧,它使用了一堆“全加器”。什么是“全加法器”?这是一个硬件电路,通过给定两个输入(每一个是一位,即一个或零),“加”它们并将结果输出到另外两个位(其中一个用于进位)。但全加法器的工作原理是什么?嗯,它是由半加法器(物理上)构造的,它由标准a
和and
门构成。如果您熟悉Python中的类似运算符(xor
和&
),您可能知道它们是如何工作的。这些门设计为使用电子元件中使用的元件(最重要的是硅)的物理特性按预期工作。我想这就是我要停下来的地方。