计算机如何存储小数点值?

3

我有几个问题:

  1. 电脑只使用1和0来表示数字。那么它如何表示像5.512这样的小数点呢?

  2. 电脑不知道我们是输入ASCII值还是随机二进制以供处理。在早期,人们使用十六进制和二进制编程。他们如何在屏幕上输出字符?除此之外,电脑如何理解65(十进制)不是一个数字,而是一个大写字母A?


4
谷歌先,其次是 Stack Overflow。这些都是基础问题,你可以自己找到答案。 - Mitch Wheat
1
http://en.wikipedia.org/wiki/IEEE_floating_point - Matt Ball
SO目前还没有第二个问题的答案,你能给我提供一个链接吗?感谢你提供的另一个答案。 - Total Anime Immersion
1
在人们用二进制编程的时代,他们没有屏幕。所有输出都是以二进制格式呈现的。Blinkenlichten。或者输出被写在卡片上,或者通过打印机输出。程序员知道他正在打印什么,从而解释输出结果。 - Amadan
1个回答

4
对于你的第一个问题,可以参考IEEE754-1985维基百科页面中提到的一种方法(可能是最常见的方法)。
对于你的第二个问题,你需要意识到值和该值的表示之间存在断开。一个值可以以一种方式存储,并以许多不同的方式进行解释。
例如,八位字节0x30, 0x31在大端16位值中可以表示为0x3031,在小端中可以表示为0x3130,在ASCII中可以表示为字符序列'0','1'。如果将其视为EBCDIC或定点值,则又会有所不同。
这完全取决于你如何解释数据。

我同意这个问题可能有不同解释,但是你谈论的是两个值之间的断开。然而,一个断开只能是1或0。那么我的问题是,计算机如何识别它是一个断开而不是一个值? - Total Anime Immersion
1
@Total,你正在尝试协调两个不同的抽象层次。这可以通过某种映射来完成。计算机没有像你所设想的“断开连接”的概念。你给它数据,告诉它如何解释这些数据,其中没有涉及到智能。你不会给CPU一个4字节的内存块,并要求它弄清楚它是什么 - 你告诉它它是什么,如果你告诉错了,那么使用你的程序的人都会遭殃 :-) - paxdiablo
哈哈,好的,现在我明白了。非常感谢 @paxdiablo。 - Total Anime Immersion
我会将你的答案标记为正确答案,但你能帮我解决一下你提到的“某种映射”吗? - Total Anime Immersion
1
@Total,我的意思是视频卡将把八位组65映射到屏幕上的某个模式“A”。处理IEEE754的CPU在操作四个八位组浮点数和八个八位组双精度浮点数时会以某种方式对待它们。您CPU内部的ALU将知道如何处理16位小端短整型,以便可以成功地将它们相加。这就是我所说的映射,即原始内容的解释。 - paxdiablo
完全解释清楚了。非常感谢。 - Total Anime Immersion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接