【问题标题】:Operator weirdness with plus and minus加号和减号的运算符怪异
【发布时间】:2021-12-07 09:58:05
【问题描述】:

所以,我正在学习运算符,尤其是二元运算符。

在以下代码中:

int x=9;
x=-x;
cout<<x; // prints as -9

x=+x;

cout<<x; //prints as -9

问题是为什么不是 9 或 +9(contextual) 而不是 -9 ?为什么会这样?

【问题讨论】:

  • 因为在-x 中可以认为是0-x。和+x 一样0+x
  • 啊,这就是它的工作原理?我的意思是编译器是这么看的?
  • 您还期待什么?通常很难将其与数学符号相提并论,但这里是相同的 +x 只是 x-xx 否定
  • 这就是它在数学中的工作方式。 - 是否定,是对零的补码。 + 只不过是强调正号而已。另一种思考方式是-x = (-1)*x+x = (+1)*x
  • 要明确 - 你希望 + ( -x ) 产生 x

标签: c++ operators


【解决方案1】:

x=-x; 表示分配给x 值,该值对当前x 是负值。

x=+x; 表示分配给x 值,该值被提升为类型int,它已经是int。由于在这一步中x 已经从之前的操作中获得了值-9,因此没有任何更改,并且再次打印-9

这里是some docs

【讨论】:

  • 但仍然是 int x=+(-6);打印为 -6
  • @JohnMellow OTOH -(-6) 将打印 6。正如您在数学中所期望的那样。这真的不是 C++ 或编程特定的符号。
  • @JohnMellow 我不确定你为什么感到困惑。也许你认为这些是数学表达式而不是变量的赋值?
  • @JohnMellow +x 在数字类型的情况下与 x 相同。这样看:+x 基本上是+1 * x 其中-x 基本上是-1 * x+x 并不意味着“x 而是积极的”。
【解决方案2】:

这是一道简单的数学题。减乘以加是减,因此,加乘以减仍然是减。这是最简单的查看方式。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案3】:
int x=9;
x=-x; //What is this for ? you mean x = x - 1 ? In this case syntax should be  x -= x same for + expression.
cout<<x; // prints as -9
x=+x;
cout<<x; //prints as -9

如果上面的表达式是正确的,但你问的是 -9 作为最终答案,这里是解决方案。

第 1 行:用 9 初始化 x。

第 2 行:将 x 分配给 x 的 -(减),即 -9

第 4 行:用 x 的 +(plus) 分配 x,即 +(-9) 等于 -9

【讨论】:

    【解决方案4】:

    x=-x,或者让x = -x更具可读性,基本上就是把x的符号倒过来的操作。

    x = +x,是一个简单的操作,因为它将x复制到x,因为在之前的操作中符号被颠倒了,x-9,所以现在-9被复制到@987654330 @。

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多