增量运算符问题

时间:2017-02-06 11:35:51

标签: c operators

这是我在入门级计算机编程课程中遇到的示例代码:

 #include <stdio.h>
 int main()
 {
     int l = 20, m = 10;
     int z;
     z= l++ || m++;
     printf("z = %d l = %d m = %d\n", z, l, m);
 }

代码打印l = 21,m = 10和z = 1 l和z的值是我所期望的,但是m的值让我烦恼。不应该是11,因为代码中存在m ++。

3 个答案:

答案 0 :(得分:2)

这是因为@app.route('/api/users/remove_group/<int:groupId>',methods=['DELETE']) def removeGroup(groupId): try: print 'its working--Delete group' if userGroup.query.filter_by(group_id=groupId).first() is not None: userGroup.query.filter_by(group_id=groupId).delete() message='Group removed succesfully\n' else: print 'Group not found' message='Group not found\n' except HTTPException as error: return error(os.version) return message 只会在m++时执行。由于l++ == 0评估为l++,因此永远不会执行20。如果m++最初为l,则会执行0

答案 1 :(得分:2)

z= l++ || m++;

在你的表达式中,l首先赋值,然后递增一个。

逻辑或(||)操作中,如果左操作数非零,则右操作数未评估且结果是真的。这就是为什么l成为21而m未被评估的原因,它的值为10

C标准( N1256:6.5.14-第4段)说:

  

与按位|不同运算符,||运营商保证   从左到右的评价; 之后有一个序列点   评估第一个操作数。如果第一个操作数比较不相等   为0时,不评估第二个操作数

答案 2 :(得分:0)

您所看到的称为短路评估。

你的话在这里:

 z= l++ || m++;

检查l的值(检查时增加)。如果l不为0,则将z设置为1.如果l为0,则检查m的值(检查时增量)。如果m不为0,则将z设置为1.否则将z设置为0。

基本上,当两个检查中的第一个(l++)已经评估为真时,系统不需要检查第二个条件,因此它不会,因此也无法增加米。