数字在计算机中是如何表示的,浮点数和二进制补码的作用是什么?

How are numbers represented in a computer and what is the role of floating-point and twos-complement?

我有一个关于计算机如何处理数字的非常普遍的问题。

在一般的计算机系统中,只知道二进制 - 0 和 1。因此在内存中,任何数字都是一个位序列。表示的数字是整数还是浮点数都没有关系。

  1. 但是基于 IEEE 754 标准的浮点数和二进制补码什么时候进入游戏?这只是编译器 (C/C++,...) 和 VM (.NET/Java) 的问题吗?

  2. 是不是所有的整数都是用补码表示的?

  3. 我读过有关 CPU 使用协处理器执行浮点运算的文章。要告诉 CPU 使用它,存在特殊的汇编程序命令,例如 add.s(单精度)和 add.d(双精度)。当我有一些使用浮点数的 C++ 代码时,此类汇编程序命令会出现在输出中吗?

我现在完全糊涂了。如果你能帮助我,那就太好了。

谢谢! 斯特凡

In general computer systems only know binary - 0 and 1. So in memory any number is a sequence of bits. It does not matter if the number represented is a int or float.

这对于内存中的表示是正确的。但是计算机执行 指令 并将当前正在处理的数据存储在 寄存器 中。指令和寄存器都是专门的,对于其中一些,用于表示二进制补码中的有符号整数,而对于其他指令,用于 IEEE 754 binary32 和 binary64 算术(在典型计算机上)。

所以回答你的第一个问题:

But when does things like floating-point-numbers based on IEEE 754 standard and the twos-complement enter the game? Is this only a thing of the compilers (C/C++,...) and VMs (.NET/Java)?

补码和 IEEE 754 二进制浮点数是 ISA 做出的很多选择,它提供专门的指令和寄存器来处理这些格式。

Is it true that all integer numbers are represented by using the twos-complement?

您可以随心所欲地表示整数。但是,如果您使用二进制补码表示有符号整数,典型的 ISA 将提供指令以有效地对它们进行操作。如果你再做选择,那就靠你自己了。