【问题标题】:Signed and unsigned integers -- why are bytes treated differently?有符号和无符号整数——为什么字节的处理方式不同?
【发布时间】:2011-11-02 17:40:38
【问题描述】:

我现在正在学习高级汇编语言,并且正在研究有符号和无符号整数的概念。看起来很简单,但是签署扩展名让我感到困惑。

获取字节 10011010,我将其视为十进制的 154。事实上,使用二进制计算器,除了选择单词以外的任何东西都会显示为十进制的 154。

但是,如果我选择单位为字节,然后输入 10011010,那么它会突然被视为十进制的 -102。每当我从一个字节开始增加它时,它就会被符号扩展,并且始终是十进制的 -102。

如果我使用高于字节的任何内容,那么它仍然是十进制的 154。

有人能解释一下这种看似不同的地方吗?

【问题讨论】:

    标签: word byte unsigned signed


    【解决方案1】:

    当您选择单位为字节时,10011010 的 MSB 被视为有符号位,这使得这个单字节有符号整数等效于 -102(2 的补码)的解释。

    对于大于 8 位的整数,比如 16 位,数字将是:0000000010011010,其 MSB 中没有 1,因此它被视为正整数,其整数表示为十进制 154。当您将 8 位字节转换为更高类型时,符号扩展也会在更大长度的存储中保留 -ve 解释。

    【讨论】:

    • 啊,我明白了。 2 问题...在 Windows 计算器上,如果我选择单词,然后输入 10011010,我得到十进制的 154。你从哪里得到 512?另外,如果我想将 154 以二进制形式存储在一个字节中,这就是我要使用无符号整数的地方吗?
    • 对不起,512 是错字,应该是 154。我已经修复了。要存储 154,您将需要至少 8 位存储空间。对于有符号的 1 字节整数,您有 7 位的大小 1 位的符号。因此,您可以使用具有 8 位长度并且不将 MSB 解释为有符号位的无符号单字节存储,例如 C 中的 unsigned char 类型。在其他较大的格式中,幅度部分的模式超过 8 位,因此您可以全部存储 +154。
    猜你喜欢
    • 1970-01-01
    • 2014-08-14
    • 2019-03-16
    • 2021-07-30
    • 2013-10-28
    • 2016-11-23
    • 2018-05-11
    • 2011-08-10
    • 1970-01-01
    相关资源
    最近更新 更多