关于计算机中数字表示的几个问题?

时间:2010-01-01 12:53:37

标签: assembly computer-science computer-architecture

我开始从书中学习汇编语言: 80x86汇编语言和计算机体系结构简介

这来自Representing Data in a Computer

  

我们已经研究过两种方案   代表数字 -

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

    然而,这些方法有两个   问题:

我不明白这些问题。

  

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

我没有得到这个。他在说什么?

  

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

  

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

我认为它是second representation problem。但好吧,我明白了。

  

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

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

  

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

我没有说一句话。

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

5 个答案:

答案 0 :(得分:1)

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

数字的二进制表示受用于表示数字的位数限制。但是,您可以定义使用大量或可变位数的表示。你用二进制零填充左边(或者用负数的二进制补码表示)。

数字的ASCII表示可以按照书中描述的那样完成。 ASCII的问题在于操纵数字更难:加法相当简单,但想象一下除法会是什么样的。

答案 1 :(得分:1)

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

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

二进制数中有多少位? 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)结束。

答案 2 :(得分:1)

不是这样的答案,只是你可能想忽略的一些建议。通过访问维基百科关于IEEE 754(浮点数表示)和BCD(二进制编码的十进制 - 与ASCII非常相似但另一种类似方法)的文章来补充您的阅读。这些将揭示问题及其解决方案。

答案 3 :(得分:1)

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

  1. 将数字存储在计算机内部使用的基础中
  2. 将数字存储为基数10(人类使用的基础)。
  3. 显然,第一种方法更适合性能,但所有问题似乎都与存储数字的第二种形式有关,这是计算机使用的一种非常不寻常的方法(但在人类可读的源文件中并不常见)。 / p>

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

    0000012345
    

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

    12345;
    

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

答案 4 :(得分:0)

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