【问题标题】:Why does ~x on an int result in -(x+1) [duplicate]为什么 int 上的 ~x 会导致 -(x+1) [重复]
【发布时间】:2017-02-15 16:11:49
【问题描述】:

为什么会有这段代码:

#include <iostream>
int main ()
{
  int x = 1;
  int y = ~x;
  std::cout << y;
}

总是打印 -(x+1)?如果 x = 00000001,难道 y = 11111110?

【问题讨论】:

  • "如果 x = 00000001,y = 11111110?"是的。但是11111110 作为有符号整数是-2。 Two's Complement
  • int 有一个标志。您可能想尝试使用 unsigned int
  • @black-goat:但y 1...11111110 在你的实验中。是什么让你认为它不是一开始的? -(x+1)-2,在 2 的补码系统上是 1...11111110。 IE。一切都按照您的预期进行。
  • 如果 int 有 32 位,~x 在二进制中是 11111111 11111111 11111111 11111110int 肯定有超过 8 位会导致 11111110。不管位数多少,逻辑都是一样的。

标签: c++ tilde


【解决方案1】:

那是因为您使用的是two's complement 系统。 C++ 不保证这一点,但所有(需要引用?)现代架构都具有此属性。

【讨论】:

  • 看起来它至少今天仍在使用,至少特别:stackoverflow.com/a/1962756/4342498
  • @krzaq 当然这是一个常见问题解答,我们正在努力保持这种状态:)
猜你喜欢
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
  • 2019-12-02
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
相关资源
最近更新 更多