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

时间:2015-08-12 08:21:59

标签: memory floating-point cpu twos-complement

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

一般来说,计算机系统只知道二进制 - 0和1.所以在内存中任何数字都是位序列。如果表示的数字是int或float,则无关紧要。

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

  2. 所有整数都是用二进制补码表示的吗?

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

  4. 此刻我完全糊涂了。如果你可以帮助我,那就太好了。

    谢谢! 斯蒂芬

1 个答案:

答案 0 :(得分:1)

  

一般来说,计算机系统只知道二进制 - 0和1.所以在内存中任何数字都是位序列。如果表示的数字是int或float,则无关紧要。

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

回答你的第一个问题:

  

但是什么时候像基于IEEE 754标准的浮点数和二进制数这样的东西进入游戏?这只是编译器(C / C ++,...)和VM(.NET / Java)的一部分吗?

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

  

是否使用二进制补码表示所有整数?

您可以根据需要表示整数。但如果您使用两个补码表示您的有符号整数,则典型的ISA将提供有效操作它们的指令。如果你做出另一个选择,你就可以自己做。