2011-08-24 53 views
1

我现在正在学习高级汇编语言,并且正在讨论有符号和无符号整数的概念。看起来很简单,但是签署扩展令我感到困惑。带符号和无符号整数 - 为什么字节处理方式不同?

把我会采取的字节10011010是十进制的154。事实上,使用一个二进制计算器与任何超过单词选择显示为十进制154。

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

如果我使用高于一个字节的东西,那么它仍然是十进制的154。

请问有人能解释一下这个看似不一样的地方吗?

回答

0

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

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

+0

啊,我明白了。 2问题...在Windows计算器,如果我选择单词,并在10011010我得到十进制154。你从哪里得到512?另外,如果我想在一个字节中以二进制形式存储154,那么我将使用无符号整数? –

+0

对不起,512是一个错字,它应该是154。我已经修好了。要存储154,您需要至少8位存储空间。对于带符号的1字节整数,您有7位用于符号的1位。因此,您可以使用一个无符号的单字节存储器,其长度为8位,并且不将MSB解释为带符号的位,如C中的'unsigned char'类型。否则,在其他更大的格式中,幅度部分的模式超过8位,因此您可以在其中存储+154。 – phoxis

相关问题