【问题标题】:Why "-1" is 11111111 not 10000001 in signed int [duplicate]为什么“-1”在有符号整数中是 11111111 而不是 10000001 [重复]
【发布时间】:2015-10-07 21:34:32
【问题描述】:

我怀疑为什么我们在signed int 中使用 -1 作为 11111111,而不是 10000001。因为我们了解到第一位用于指定符号,其余七位用于值。那么为什么设计师决定使用 -1 作为

[ first bit = 1 , Value by seven bits=127 ] 但不是 [ first bit = 1 , Value by seven bits=1 ]

【问题讨论】:

  • 因为补码。
  • @Oliver:你能解释一下吗?
  • 详细解释可见Wikipedia
  • this question(重复?)
  • 你在想的是'符号幅度'表示。这是一种有效的格式,但它不是最常见的(大部分情况下)——这是二进制补码表示法,它给出了您提到的 11111111 格式。所有这些都假设您正在处理有符号的 8 位整数(又名 signed char)。

标签: c++ c


【解决方案1】:

C 和 C++ 允许符号和大小(使用 -1,如 10000001)和二进制补码形式(使用 -1,如 11111111)。

此外,两种语言都允许补码形式(使用 -1,如 11111110)。

但是,在大多数现有平台上,都使用二进制补码形式。一个主要优点(您询问的“为什么”)是值与使用无符号算术的环绕获得的值相同,这就是您在 C 和 C++ 中使用 unsigned 获得的值。换句话说,如果您将相同的位解释为无符号值,则它与负值的差正好为 2n,其中 n是值表示位数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多