这个Precedence运算符是如何工作的?

avi*_*irk 0 c++ operator-keyword

我知道这是一个愚蠢的问题,但我不知道我错过了哪一步,所以无法理解为什么输出是这段代码的输出.

int i=2;
int c;
c = 2 * - ++ i << 1;
cout<< c;

我在这段代码中理解这一行很困难:

c = 2 * - ++ i <<1;

我收到了结果-12.但我无法理解运算符的优先级如何在这里工作?

Set*_*gie 5

看一下C++ Operator Precedence表.

  1. ++i正被评估,得到3.
  2. 一元-正在被评估,屈服-3.
  3. 乘法正在进行1,屈服-6.
  4. 评估位移(左移1有效地乘以2)产生-12.
  5. 结果-12将分配给变量c.

如果你使用括号来查看运算符优先级在做什么,你就会得到

c = ((2 * (-(++i))) << 1);
Run Code Online (Sandbox Code Playgroud)

此外,由于运算符之间的奇怪间距,该表达式有点误导.写它会更好c = 2 * -++i << 1;

1请注意,这不是一元*,它取消引用指针.这是乘法运算符,它是二元运算符.

  • Avrik,_unary_`*`是_not_ multiplication,它是解除引用的.乘法是_binary_运算符. (2认同)