组合复合运算符
Combining compound operators
在为像 Arduino 这样的微型计算机编程时,我只是 C 的临时用户,但我有兴趣提高对白话的理解。
我知道您可以 shorthand 诸如 x = x % 10
到 x %= 10
和 x = x + 1
到 x += 1
之类的东西。但是我无法将这两个部分结合起来:
x = (x + 1) % 10
如果可能的话,它看起来像什么?
(x += 1) %= 10
?好像...如果没有错,那就令人困惑了。
表达式 (x += 1) %= 10
在 C 中不合法。赋值运算符的结果,无论是 =
还是复合赋值运算符之一,都不是左值。笼统地说,这意味着它不能出现在作业的左侧。
该声明必须分为两部分:
x += 1;
x %= 10;
顺便说一句,(x += 1) %= 10
在 C++ 中有效。
只需尝试 x += 1; x %= 10;
作为替代,它会起作用,但它不等同于第一个表达式。您不能将两者都包装在一个表达式 [1] as
中
x op= expression;
表示
x = x op (expression); /* look at the parenthesis */
这会强制首先对表达式求值。唯一一个
x = (x op1 a) op2 b;
如果运算符是关联的并且表达式可以转换为:
,则可以转换为运算赋值运算
x = x op1 (a op2 b);
(或者如果op2
的优先级高于op1
,表示求值顺序同上)然后
x op1= a op2 b;
有可能。
例子
x = x + a + b; ==> x += a + b; /* this implies a different order of evaluation */
x = x + a * b; ==> x += a * b;
x = x + a % b; ==> x += a % b; /* % has higher precedence than + */
注意 [1]: 好吧,你可以,但是使用另一个运算符,,
逗号运算符,你可以将它转换为 x += 1, x %= 10;
在为像 Arduino 这样的微型计算机编程时,我只是 C 的临时用户,但我有兴趣提高对白话的理解。
我知道您可以 shorthand 诸如 x = x % 10
到 x %= 10
和 x = x + 1
到 x += 1
之类的东西。但是我无法将这两个部分结合起来:
x = (x + 1) % 10
如果可能的话,它看起来像什么?
(x += 1) %= 10
?好像...如果没有错,那就令人困惑了。
表达式 (x += 1) %= 10
在 C 中不合法。赋值运算符的结果,无论是 =
还是复合赋值运算符之一,都不是左值。笼统地说,这意味着它不能出现在作业的左侧。
该声明必须分为两部分:
x += 1;
x %= 10;
顺便说一句,(x += 1) %= 10
在 C++ 中有效。
只需尝试 x += 1; x %= 10;
作为替代,它会起作用,但它不等同于第一个表达式。您不能将两者都包装在一个表达式 [1] as
x op= expression;
表示
x = x op (expression); /* look at the parenthesis */
这会强制首先对表达式求值。唯一一个
x = (x op1 a) op2 b;
如果运算符是关联的并且表达式可以转换为:
,则可以转换为运算赋值运算x = x op1 (a op2 b);
(或者如果op2
的优先级高于op1
,表示求值顺序同上)然后
x op1= a op2 b;
有可能。
例子
x = x + a + b; ==> x += a + b; /* this implies a different order of evaluation */
x = x + a * b; ==> x += a * b;
x = x + a % b; ==> x += a % b; /* % has higher precedence than + */
注意 [1]: 好吧,你可以,但是使用另一个运算符,,
逗号运算符,你可以将它转换为 x += 1, x %= 10;