我开始从书中学习汇编语言: 80x86汇编语言和计算机体系结构简介
这来自Representing Data in a Computer
我们已经研究过两种方案 代表数字 -
- 使用二进制整数(通常以十六进制表示)或
- 使用ASCII码。
醇>然而,这些方法有两个 问题:
我不明白这些问题。
1:可用于表示数字的位数是有限的,
我没有得到这个。他在说什么?
2:目前尚不清楚如何表示负数。
细
解决第一个表示 上面提到的问题,你可以 只需包含减号代码即可 标志。例如,ASCII码 对于四个字符-817是2D (减号),38,31和37。
我认为它是second representation problem
。但好吧,我明白了。
要解决第一个问题,你可以 总是同意使用固定数量的 字节,可能是左边的填充 使用ASCII代码为零或空格。
我不知道他想说什么。 ASCII codes for zeros or spaces.
...
或者,您可以使用 可变字节数,但同意 这个数字以最后一个结尾 数字的ASCII码,即 用a终止字符串 非数字。
我没有说一句话。
我不知道为什么。但我无法理解他想说的话。任何人都可以解释一下。 (例子很棒)
答案 0 :(得分:1)
哇。我没有读过这本书,但如果你的摘录是准确的,我很抱歉我错过了它。
数字的二进制表示受用于表示数字的位数限制。但是,您可以定义使用大量或可变位数的表示。你用二进制零填充左边(或者用负数的二进制补码表示)。
数字的ASCII表示可以按照书中描述的那样完成。 ASCII的问题在于操纵数字更难:加法相当简单,但想象一下除法会是什么样的。
答案 1 :(得分:1)
我明白你为什么遇到麻烦。我建议你找另一本书。这个非常非常难以解释。
“可用于表示数字的位数有限”
二进制数中有多少位? 32?这是一个限制。
“我不知道他想说什么。用零或空格的ASCII码。”
0x20中空格的ASCII码。零码的ASCII码是0x30
“要解决第一个问题,你总是可以同意使用固定数量的字节,也许左边用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)
他指的是在内存中存储整数的两种不同方法。他提出了两种方法:
显然,第一种方法更适合性能,但所有问题似乎都与存储数字的第二种形式有关,这是计算机使用的一种非常不寻常的方法(但在人类可读的源文件中并不常见)。 / p>
忽略方法1并仅考虑方法2,他进一步将其分为两个子类别:固定宽度和可变宽度。在固定宽度中,您可以选择一些大小限制,例如10位数,如果较小则选择零。使用此系统,12345将表示为ASCII字符串:
0000012345
使用可变长度系统,您可以选择一些分隔符,例如分号。这允许您存储任何大小的整数:
12345;
计算机通常不会在内部以此形式存储数字。现代处理器支持的整数运算需要使用计算机的默认基数存储数字。如果您愿意,您可以将其视为二进制或十六进制,但实际上这些只是更人性化的方式来表示数据,以便我们更容易思考它。通常,现代计算机在较大的数据块上运行,例如一次32位。
答案 4 :(得分:0)
要了解计算机如何操作数据,我们必须首先了解计算机如何表示数据。要做到这一点,有必要了解一些关键概念: 数字基础 十进制在十进制系统(基数10)中,我们将写入数字11。 二进制在八进制系统(基数2)中,外星人会写1011。 八进制在二进制系统(基数8)中,计算机将使用13。 十六进制在十六进制系统(基数为16)中,数字为B!