关于计算机如何使用数字,我有一个非常普遍的问题。
一般来说,计算机系统只知道二进制 - 0和1.所以在内存中任何数字都是位序列。如果表示的数字是int或float,则无关紧要。
但什么时候基于IEEE 754标准的浮点数和二进制补码进入游戏呢?这只是编译器(C / C ++,...)和VM(.NET / Java)的一部分吗?
所有整数都是用二进制补码表示的吗?
我读过有关使用协处理器执行浮点运算的CPU。为了告诉CPU使用它,存在特殊的汇编程序命令,如add.s(单精度)和add.d(双精度)。当我有一些使用浮点数的C ++代码时,这样的汇编命令会在输出中吗?
此刻我完全糊涂了。如果你可以帮助我,那就太好了。
谢谢! 斯蒂芬
答案 0 :(得分:1)
一般来说,计算机系统只知道二进制 - 0和1.所以在内存中任何数字都是位序列。如果表示的数字是int或float,则无关紧要。
这对于内存中的表示是正确的。但计算机执行指令并将当前正在处理的数据存储在寄存器中。对于其中一些指令和寄存器,它们都是专用的,用于表示二进制补码中的有符号整数,对于其它指令,用于IEEE 754二进制32和二进制64算术(在典型的计算机上)。
回答你的第一个问题:
但是什么时候像基于IEEE 754标准的浮点数和二进制数这样的东西进入游戏?这只是编译器(C / C ++,...)和VM(.NET / Java)的一部分吗?
两个补码和IEEE 754二进制浮点是由ISA做出的非常多的选择,它提供了专门的指令和寄存器来处理这些格式。
是否使用二进制补码表示所有整数?
您可以根据需要表示整数。但如果您使用两个补码表示您的有符号整数,则典型的ISA将提供有效操作它们的指令。如果你做出另一个选择,你就可以自己做。