0

Problem:

Write 0b11001001 in decimal.

I tried the following:

110010012 = 1 + 8 + 64 + 128 = 201

but the answer is –55. Where am I going wrong?

4

2 回答 2

1

如果基础数据类型unsigned byte ,您的答案是正确的。如果类型是有符号字节,那么它的范围是 [-128..127]。你有 201超出范围[0..127],所以 201 应该被解释为负值。为了找出相应的负值,您应该将代码转换为所谓的补码表示

http://en.wikipedia.org/wiki/Signed_number_representations

  1. 反转每一位
  2. 加 1

    11001001 -> 00110110(反向)-> 00110111(增加一个)

    0b00110111 是 1 + 2 + 4 + 16 + 32 = 55 十进制

所以有符号字节的答案是 -55

于 2013-08-09T06:30:32.217 回答
0

我假设这是一个家庭作业问题或测试问题?如果一串位表示一个整数,它可以被解释为有符号(在这种情况下,该值可以是正数、零或负数)或无符号(在这种情况下它只是正数或零)。

在本例中,您为一个八位字长的无符号整数提供了正确答案,但提问者正在寻找一个有符号整数的值。

有符号值通常使用称为二进制补码的方案表示,如下所述:

http://en.wikipedia.org/wiki/Two's_complement _

-55 是解释为二进制补码的二进制序列的值,假设字长为 8 位。

但是,还有其他用于以二进制编码负整数的方案,例如反码,它提供了不同的结果:

http://en.wikipedia.org/wiki/Ones '_complement

二进制补码通常是首选,因为零只有一种表示,而一个补码提供正零和负零表示。

无论如何,这个问题似乎依赖于隐含的、未说明的假设。

于 2013-08-09T06:31:52.623 回答