首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合复合算子

组合复合算子
EN

Stack Overflow用户
提问于 2019-03-17 02:36:49
回答 2查看 46关注 0票数 3

在为Arduino这样的微系统编程时,我只是一个普通的C用户,但我对提高对当地语言的理解很感兴趣。

我知道你可以速记像x = x % 10x %= 10x = x + 1x += 1这样的东西。但我不能把这两者结合在一起:

x = (x + 1) % 10

如果有可能的话,它是什么样子的?(x += 1) %= 10?那似乎..。如果没有错,那就让人困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-17 02:41:54

表达式(x += 1) %= 10在C中是不合法的。赋值运算符的结果,无论是=还是复合赋值运算符,都不是lvalue。松散地说,这意味着它不能出现在作业的左边。

这一声明必须分为两部分:

代码语言:javascript
复制
x += 1;
x %= 10;

顺便说一下,(x += 1) %= 10在C++中是有效的。

票数 1
EN

Stack Overflow用户

发布于 2019-03-20 07:10:32

只需尝试x += 1; x %= 10;作为替代,它将工作,但它并不等同于第一个表达式。不能在单个expression1中将两者都包装为

代码语言:javascript
复制
x op= expression;

手段

代码语言:javascript
复制
x = x op (expression);  /* look at the parenthesis */

这迫使我们先对表达式进行评估。唯一的情况是

代码语言:javascript
复制
x = (x op1 a) op2 b;

如果运算符是关联的,并且表达式可以转换为:

代码语言:javascript
复制
x = x op1 (a op2 b);

(或者如果op2的优先级高于op1,这意味着计算顺序与上面一样),然后

代码语言:javascript
复制
x op1= a op2 b;

是有可能的。

示例

代码语言:javascript
复制
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;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55203364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档