【问题标题】:How is unsigned int/long representedunsigned int/long 是如何表示的
【发布时间】:2010-03-04 18:22:23
【问题描述】:

我正在阅读一些汇编教程,其中解释了有符号整数和无符号整数以及它们在计算机内存中的表示形式之间的区别。

我记得在数字的开头有一些类似的东西,所以它告诉整数是无符号的还是有符号的。

如果有人知道,请回答。

【问题讨论】:

标签: memory unsigned signed representation


【解决方案1】:

Signed Number representation 上的维基百科页面显示了最常见的有符号和无符号整数值的内存实现。

Two's complement 是最常见的表示形式。

【讨论】:

    【解决方案2】:

    有符号数有很多种可能的表示形式,最常见的是two's complement.

    【讨论】:

    • 但是..这不是我想要阅读的内容...它们在计算机内存中是如何表示的?机器(或编译器)如何知道 int 是有符号的还是无符号的?等
    • 机器不知道——这就是为什么你必须告诉编译器如何处理它。在内存中,它只是表示为特定的位数,可以是任何东西......
    • 它是相关的,因为二进制补码非常棘手,可以让许多操作平等地处理无符号和有符号数据,例如加法。
    【解决方案3】:

    MSB 不判断数字是否有符号;在有符号数中,它表示该数是否为负数。在无符号数字中,它只是 MSB。它是决定一个数字是有符号还是无符号的程序。

    【讨论】:

      【解决方案4】:

      嘿嘿。棘手的问题。有符号和无符号整数的表示完全相同。看着记忆,你永远无法区分它们。它源于冯诺依曼原理之一。那么区别在哪里呢?不同之处在于它们的解释方式。如果变量是有符号的,编译器使用有符号整数的命令。此外,如果我们知道那个数字是有符号的,那么它的第一位就告诉我们它是符号。两种方式都以~i + 1(c 语法)进行转换

      【讨论】:

        【解决方案5】:

        有许多可能的表示形式,每一种都取决于您的computer's organization。最著名的是

        在这两种表示中,您都可以测试第一个(最高有效位)位,以确定该数字是正数(通常关闭)还是负数(位打开)。也就是说,如果您将该号码视为已签名。如果您告诉编译器将此类数字视为无符号数,则符号位将用作数据(它将数据类型的最大 range 加倍)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-29
          • 1970-01-01
          • 2012-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-20
          相关资源
          最近更新 更多