【问题标题】:Few questions on number representation in computer?关于计算机中数字表示的几个问题?
【发布时间】:2010-12-31 14:30:39
【问题描述】:

我从这本书开始学习汇编语言:Introduction to 80x86 Assembly Language and Computer Architecture

这是来自Representing Data in a Computer

我们研究了两种方案 代表数字-

  1. 使用二进制整数(通常以十六进制表示)或
  2. 使用 ASCII 码。

但是,这些方法有两个 问题:

我不明白这些问题。

1:可用于表示数字的位数是有限的,并且

我没听懂。他在说什么?

2:不清楚如何表示负数。

很好

解决第一个表示 上面提到的问题,你可以 只需包含减号的代码 标志。例如,ASCII 码 对于四个字符 -817 是 2D (用于减号)、38、31 和 37。

我认为是second representation problem。不过好吧,我明白了。

要解决第一个问题,您可以 总是同意使用固定数量的 字节,可能在左边填充 用 ASCII 码表示零或空格。

我不知道他想说什么。 ASCII codes for zeros or spaces.??

或者,您可以使用 可变字节数,但同意 数字以最后一个结尾 一个数字的 ASCII 码,即 用 a 终止字符串 非数字。

我一个字也没听出来。

我不知道为什么。但我无法理解他想说什么。任何人都可以解释这一点。 (例子会很棒)

【问题讨论】:

  • 与其试图消除本书段落中的迷雾,我建议您阅读二进制补码。它是最重要的数字表示,尤其是对于汇编而言(不仅用于算术,还用于相对跳转或寄存器相对内存访问中的偏移)。

标签: assembly computer-science computer-architecture


【解决方案1】:

不是这样的答案,只是一些您可能想忽略的建议。阅读有关 IEEE 754(浮点数表示)和 BCD(二进制编码的十进制 - 与您的 ASCII 不同,而是另一种类似方法)的 Wikipedia 文章来补充您的阅读。这些将阐明问题和一些解决方案。

【讨论】:

    【解决方案2】:

    要了解计算机如何处理数据,我们必须首先了解计算机如何表示数据。为此,有必要了解一些关键概念: 数基 十进制 在十进制系统(以 10 为底)中,我们将写数字 11。 二进制 在八进制系统(以 2 为底)中,外星人会写 1011。 八进制 在二进制系统(以 8 为基数)中,计算机将使用 13。 十六进制 在十六进制系统(以 16 为基数)中,数字将是 B !

    【讨论】:

      【解决方案3】:

      我明白你为什么遇到麻烦了。我建议你再找一本书。这是非常非常难以解释的。

      “可用于表示数字的位数是有限的”

      一个二进制数有多少位? 32?这是一个限制。

      “我不知道他想说什么。零或空格的 ASCII 码。”

      0x20 中空格的 ASCII 码。零的 ASCII 码是 0x30

      http://www.asciitable.com/

      “要解决第一个问题,您总是可以同意使用固定数量的字节,也许在左边用 ASCII 码填充零或空格。”

      没有多大意义。第一个问题是限制。假设它是针对第二个问题,它是这样完成的:

      0x30 0x30 0x37 == 7。固定长度为 3,在左侧用 ASCII 零填充。这是数字的标准 COBOL 表示形式——在左侧用前导零填充的字符串。 (COBOL 通常使用尾随符号字符)。

      “或者,您可以使用可变数量的字节,但同意数字以数字的最后一个 ASCII 码结尾,即以非数字结束字符串。”

      数字 1,234,456,890,123(相当大的数字)可能是

      0x20 0x31 0x32 0x33 0x34 0x34 0x35 0x36 0x38 0x39 0x30 0x31 0x32 0x33 0x00

      它有一个领先的空间,使它成为积极的。它以非数字 (0x00) 结尾。

      【讨论】:

      • 可用于表示数字的位数是not limited。数字 7 可以表示为 111(3 位)或 0111(4 位)或 00111(5 位)等等。你的声明How many bits in a binary number? 32?32?你从哪里得到这个限制?
      • The ASCII code for space in 0x32. The ASCII code for zero is 0x30。我的问题不是“空格和零的 ascii 代码是什么。我可以查找 ascii 表。--- 作者说:To solve the first problem, you could always agree to use a fixed number of bytes, perhaps padding on the left with ASCII codes for zeros or spaces. 好吧,当您同意固定字节数时,如何用“ASCII 向左填充”代码”?你能用“ASCII 代码”向左填充来表示 2 个字节中的 7 吗?
      • @Alice:可用于表示数字的位数总是有限的,因为计算机是有限的。唯一的问题是该限制是固定的硬编码限制,还是仅取决于可用的计算机资源。
      • @S.Lott:“0x32 中空格的 ASCII 码。”空格的 ASCII 码是 0x20,而不是 0x32。不过你后来做对了。
      【解决方案4】:

      他指的是在内存中存储整数的两种不同方法。他提出了两种方法:

      1. 将号码存储在计算机内部使用的基数中
      2. 将数字存储为以 10 为基数(人类使用的基数)。

      显然第一种对性能更好,但您的所有问题似乎都与第二种存储数字的形式有关,这是一种非常不寻常的计算机使用方法(但在人类可读的源文件中并不罕见)。

      忽略方法1,只考虑方法2,他进一步将其分为两个子类别:固定宽度和可变宽度。在固定宽度中,您可以选择一些大小限制,例如 10 位,如果小于则用零填充。在这个系统中,12345 将被表示为一个 ASCII 字符串:

      0000012345
      

      对于可变长度系统,您可以选择一些分隔符,例如分号。这允许您存储任何大小的整数:

      12345;
      

      计算机通常不会在内部以这种形式存储数字。现代处理器支持的所有整数运算都需要使用计算机的默认基数来存储数字。如果您愿意,您可以将其视为二进制或十六进制,但实际上这些只是表示数据的更人性化的方式,以便我们更容易地思考它。现代计算机通常处理较大的数据块,例如一次处理 32 位。

      【讨论】:

        【解决方案5】:

        哇。我没有读过这本书,但如果你的摘录是准确的,我很抱歉我错过了它。

        数字的二进制表示受到用于表示数字的位数的限制。不过,您可以定义使用大量或可变位数的表示。您可以在左侧填充二进制零(或负数的二进制补码表示形式的零)。

        数字的 ASCII 表示可以按照书中描述的方式进行。 ASCII 的问题在于处理数字更难:加法相当简单,但想象一下除法会是什么样子。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-17
          • 2016-05-25
          • 2011-01-19
          • 1970-01-01
          • 2018-09-10
          • 2011-06-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多