【问题标题】:How does the computer recognise that a a given number is in its Two's comeplent form?计算机如何识别给定数字的补码形式?
【发布时间】:2016-04-20 03:38:28
【问题描述】:

我了解二进制补码是什么以及它有什么用处。我想知道的是计算机如何确定数字是二进制补码形式?

它如何以及何时确定 1111 1110 是 -2 而不是 254?是操作系统级别的处理吗?

【问题讨论】:

  • 如果符号很重要,通常会有多个 CPU 指令来处理这两种情况(例如,MULIMULJAJG 在 x86 上)。对于某些操作(如加法),如果您打算将这些位视为 -2 或 254,则无关紧要;无论哪种方式,结果都是一样的。

标签: binary computer-science computer-architecture twos-complement


【解决方案1】:

就我认为它依赖于编程语言而言。

假设整数分配 1 个字节的内存(为了简单起见)。

如果它是 UNSIGNED 整数(仅限正数),您可以使用 0 到 255 之间的任何数字(总共 2^8 个数字,包括零)。

00000000 将是 0,并且 11111111 将是十进制的 255。

但是,如果您的整数是有符号的(您可以同时使用负数和正数),您可以使用从 -127 到 127 的值,包括零(同样是 2^8 个数字)。

如果您的编译器遇到 11111111 SIGNED int 值,它不会将其解释为 255,因为signed int 仅允许 0 到 127 之间的值作为正数,因此它会将其视为 -1。下一个,-2 将是 11111110(十进制 254)等等...

【讨论】:

    【解决方案2】:

    计算机已经期望数据采用(或不采用)二进制补码形式(否则将无法判断它是 2 还是 254)。是的,这可能会在操作系统级别决定。

    您可能会将此与在高级编程语言中声明变量时设置变量类型时使用的想法相同;例如,您很可能将类型设置为“十进制”或“整数”,然后编译器会期望值坚持这种类型。

    【讨论】:

    • 所以 CPU 不在乎它是否有符号/无符号;它将根据接收到的位计算请求的操作(操作系统发送的一些指令),并且操作系统将解释返回的位。我说的对吗?
    • 我看不出操作系统与此有什么关系。在 CPU 级别,当您希望将操作数视为有符号与无符号时,您有不同的指令(或同一指令的不同变体) - 对于那些符号重要的操作(对于更多的操作,它不重要)。如果您使用比汇编语言更高级的语言进行编程,您通常会得到有符号和无符号数据类型,编译器会根据它选择适当的指令。
    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多