【问题标题】:Why do computers work in binary?为什么计算机以二进制工作?
【发布时间】:2011-07-07 02:32:54
【问题描述】:

我进行了一些搜索,但没有找到真正令人满意的答案。作为一名开发人员,我想投入必要的时间来理解这一点,因此我正在寻找对此的完整解释,并随时提供任何有用的参考。

谢谢。

【问题讨论】:

  • 我认为是因为数字信号可以输入1 或0。
  • 查看用户 Nick D 链接的问题 - 三元计算机也存在,但尚未普及。
  • 谢谢,但上面链接的问题要具体得多,关于是否使用不同的基础,这不是我想要的。
  • 鉴于下面的答案,我想说一般计算机程序员不是询问硬件设计或电子产品的人

标签: binary hardware computer-science


【解决方案1】:

我猜你需要考虑 PC 中的 IC,每个 IC 都有数百万个门,主要是 NANDS 或 NORS,每次计算都是真或假,即分别为 0 或 1,因此二进制数就足够了。希望很清楚:-)

【讨论】:

    【解决方案2】:

    因为计算机是状态机,它们主要理解两种状态。也就是说,开和关,它涉及电力。这是主要原因。

    另外,你怎么会发现 T 恤说有 10 种类型的人,懂二进制的和不懂二进制的? :)

    【讨论】:

    • 这就像说你有 50% 的机会中奖;无论你赢与否。此外,它完全错误。
    • 如果你这么说肯定是错的,哈哈。他们还了解其他宇宙中不存在电力的状态,即 2。
    • SpyrosP:我们只是简单地将 1/0 定义为特定的伏特级别,无论定义更多级别以具有更基本的数字表示。对于我们经常使用超过 1/0 的机器,实际上最常见的解决方案是使用连续信号,即具有无限多个状态。
    • 我以为我在回复中提到了电力。我应该说电路让它变得更好吗?
    【解决方案3】:

    好的...我会就此发表我的看法,但首先有必要说我离专家还很远,所以请谨慎回答。

    在所有这些硬件、门和晶体管的底层,一台计算机不再是一个电路。在电路的每个部分,电脉冲可以流动……或不流动(这是一个简化版本,请阅读 paxdiablo 评论)。 2 个州。这两种状态可以用 0 或 1 来表示。这是二进制!

    事实上,每个基数都可以进行数学计算,人类使用基数为 10 的唯一原因是我们(过去)有 10 个手指,因此我们很容易理解。数字系统有两种状态,因此 base-2 是它们的最佳选择。

    【讨论】:

    • 理论上可以有多个状态。您可以使用电压,例如 0v = 0、1v = 1、2v = 2 等。但要复杂得多。
    • 实际上,它是高低电压而不是电流,但我更感兴趣的是你关于我们曾经有十根手指的断言。你生活在一个突变的殖民地还是什么的? :-)
    • @paxdiablo: :D 是的,我们是在小隔间里培养的,他们让我们每天开发 10 个小时的软件。已经进行了一些基因实验,以创造一个具有更多手指的新种族,从而能够更快地发展。
    【解决方案4】:

    计算机主要处理电信号;作为一个笨机器,它只能理解“高”和“低”。高为+5v,低为0v。 (伏特)。因此,二进制中的 1 代表高或“开”。 0 代表“低”或“关闭”。所以,需要二进制才能让计算机理解一些东西。

    【讨论】:

    • High 和 Low 实际上并不总是与 5v 和 0v 相关联。除了 0v/5v 只是一种可能的表示(RS232,例如使用内存中的 +/- 12V)这一事实之外,有时它们是相反的。
    【解决方案5】:

    这是因为逻辑门的工作原理:如果控制电压超过某个阈值,则有逻辑输出(1);如果不是,则没有逻辑输出 (0)。

    但可能更重要:

    当基于量子的机器出现(或其他类似的东西,这可能会鼓励更复杂的状态表示)时,也许有一次计算机将不再以二进制形式工作。 但由于二进制值是任何(更复杂的)状态的最简单表示,即使在“量子时代”,最好还是让计算机以二进制方式工作(从其他物理表示中抽象出来,例如三元左右,如果给定的话)。

    【讨论】:

    • 晶体管不是这样工作的;这就是饱和晶体管的工作原理。
    • 这就是逻辑门的工作方式(如果将 "current" 替换为 "voltage")。逻辑门可以(是)由晶体管制成,但晶体管本身就是放大器。
    • 感谢您的提示,伙计们。我已经朝那个方向编辑了我的答案,并强调了我真正的关键信息。
    【解决方案6】:

    计算机正在使用电力作为传输信息的手段。使用电力作为信息的最简单方法是开启或关闭(1 或 0)。

    当然你可以用不同的电压来代表不同的数字,但是这样做的电子元件真的很复杂。

    还需要注意的是,写入和读取 1 和 0 的能力足以计算任何计算,这称为Turing completeness,因此无需找到一些更复杂的系统,允许二进制以外的其他东西

    (好吧,说得透彻,图灵完备性只能在无限内存的情况下实现,但这在这里并不重要。)

    【讨论】:

      【解决方案7】:

      计算机可以被构建为即使使用十进制数字也可以工作,但从工程的角度来看,只区分两种状态要安全得多。

      值1(+5V)的电压只是一个理论值,在现实生活中它总是有点不同。如果他们用小数做计算机,将无法判断 +4.75V 是 9 还是 10。

      【讨论】:

      • +1。更好,我一直在等待这个 - 这确实是因为易于区分电压 - 电子爱好者知道这一点,因为倾向于将“开”视为 3.5 和 5V 之间的任何地方,例如低于 1.5V 。这一切都取决于实用性——即使是大肆吹嘘的方波也不是方波,而只是一个近似值。
      • 那么确实有基于继电器而不是晶体管的旧系统(想想旧的弹球机)。那些真的是开或关。
      • @phkahler:+1,这正是我要添加的内容。
      • @paxdiablo 是的,但我们使用滞后。
      【解决方案8】:

      我建议通过Andrew S. Tanenbaum 购买这个book。他开发了 Linux 的前身之一,称为 Minix。我在大学课程中使用了Structured Computer Organization。

      为什么计算机使用二进制不仅仅是切换上下文的问题。

      相对于 3v 的参考电压。 +1v(4v) = true or 1 and -1v(2v) = false or 0.

      这也与大多数efficient method of creating controlling or logic circuits有关。这与实施成本有关。与使用十进制或模拟 see this answer 的电路相比,构建使用二进制的电路需要多少成本。

      如果您比较现代 CPU 上安装了数十亿个二进制电路晶体管。使用十进制(或模拟)系统执行此操作的成本对于您想要添加的每个数字都会成倍增加,因为您现在必须添加更多的控制电路。

      如果您想了解一些最重要的组件,这些组件有助于使二进制成为逻辑和控制电路的默认标准,请阅读并理解 Wikipedia 中的以下主题。通读最重要的主题大约需要 4 个小时,这些主题与用于创建电路的一些电气工程有关。

      我试图完整地列出您需要了解实际开关的工作原理以及使用它们的原因的概念列表。以及为什么二进制Arithmetic 是一种高效的硬件计算形式。

      • Transistor types 了解pnp and npn transistor types 以了解形成开关的实际电路是如何工作的。这些电路制造起来非常便宜,可以缩小到极小的(纳米)尺寸
      • Logic Circuitry. 如果您了解基本逻辑电路,您将了解实际晶体管类型是如何用于实现它们的。这些与一些编程结构有关,例如“和&&”“或||”和“如果,分支”结构。
      • DigitalCircuitry 有一个使用完整缺点部分比较模拟 和数字电路
      • NAND Logic Gate 很重要,因为所有其他逻辑门电路都可以仅使用这一个逻辑门来实现。简化制造过程,因为可以简化用于创建电路的机器的复杂性。
      • Adder Circuits 了解如何使用逻辑门完成基本加法。
      • Twos Complement 这对于理解实际 CPU 中的数字表示非常有帮助。在 CPU 中实现这种类型的算法也非常便宜,因为它需要更少的晶体管。例如,只需一个简单的加法电路即可进行加法和减法。如果你加上一个负数,你会得到正确的答案,即 +7 + (-4) = +3。这也有助于理解integer overflow
      • Binary_number
      • 这些是用于控制其他电路的一些最常用的马戏团。这些控制电路何时打开和关闭。 DecoderEncoder(如果或分支)条件逻辑是如何实现的。
      • Multiplexer 是完成路由的基础。在 CPU、BUS 和网络中。大多数数字设备中最常见的逻辑电路之一。

      现在是一些硬核的东西。 C. 和 C++ 用于编写与实际硬件对话的device drivers。如果您真的想了解某些设备的工作原理,您的 CPU 和/或外部设备learn Assembler。您将开始了解如何通过将某个设备寄存器设置为特定值来关闭设备,逻辑电路将读取该值以更改设备状态。例如,您将理解为什么 (0101) base2 = 5(二进制相关的东西)会以特定方式通过电路来打开和关闭设备。

      【讨论】:

      • 对不起,一旦我有更高的声誉,我会更新我想包含的链接。我有一个很好的解释,但是链接太多了。
      • 这个答案让我哈哈大笑——Tanenbaum 写了一本非常流行的关于硬件设计基础的书,但那本(虽然也很流行)不是。我想你在想Structured Computer Organization。
      • @blueraja-danny-pflughoeft 感谢您的更正,我应该在放下链接之前检查一下
      • @blueraja-danny-pflughoeft 我看到你在投票结束这个话题的人中。但是第 4 点的常见问题解答显示 这是编程专业所独有的。 我认为这是在 c++ 或汇编程序编程领域,并且考虑到我们所做的只是使用计算机我觉得这是非常相关的,因此赞成票和意见。
      • @nelaar 关闭选民不会收到@-replies 的通知,但据我所知,问题中的 nothing 表示任何 C++ 或汇编程序编程。您的回答可能会提到这些,但这是我们正在谈论的问题,而不是答案
      【解决方案9】:
      【解决方案10】:

      在计算机中,我们总是使用最简单的东西来帮助我们加快计算速度。 所以在这里,如果我们看到二进制是它们中最不复杂的......

      考虑这里的数字 1000,

      对于一元:- 输入符号 {0} 代表 1000 的位数:- 1000, 复杂度:- 1000*1=1000

      对于二进制:- 输入符号 {0,1} 代表 1000 的位数:- 10, 复杂度:- 10*2=20

      对于三进制:- 输入符号 {0,1,2} 代表 1000 的位数:- 7, 复杂度:- 7*3=21

      对于十进制:- 输入符号 {0,1,2...9} 代表 1000 的位数:- 4, 复杂度:- 4*10=40

      因此我们看到二进制的复杂度最低。

      【讨论】:

        猜你喜欢
        • 2014-08-03
        • 1970-01-01
        • 1970-01-01
        • 2021-07-30
        • 2021-03-05
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多