【试题023】C语言自增运算符例题(经典★)

1.题目:

设有以下程序段:

int x=2,y=2,z=0,a;

a=++x || ++y && z++;

printf("%d,%d,%d\n",x,y,z);

执行后输出的结果是 ?

2.代码+分析:


  //设有以下程序段:
  /*int x = 2, y = 2, z = 0, a;
  a = ++x | ++y&&z++;
  printf("%d,%d,%d\n", x, y, z)
    执行后输出的结果是? */
  int x = 2, y = 2, z = 0, a;
  a = ++x || ++y  && z++;
  printf("%d,%d,%d\n", x, y, z);
  //分析:根据优先级口诀,++排第二,&&十一,||十二
  //所以 : ++x=3,++y=3(未执行),z++=0(未执行)
  //然后: ++y && z++ =3 && 0=0(未执行)
  //接着: 3 || 0=1,但是因为||前面为真发生短路现象后面都不执行
  //输出x=3,y=2,z=0
  //此时我们再从新捋一遍顺序,逻辑或的短路现象比优先级高,一旦短路后面优先级都不再考虑和执行
  /*++x 递增了 x 的值,所以 x 变成了3。
然后,整个表达式 a = ++x || ++y && z++; 中的左侧操作数 ++x 的结果为非零,因此不再计算右侧的操作数
    ++y 没有执行,所以 y 仍然为2。
    z++ 也没有执行,因此 z 仍然为0*/

}

3.注意:

  • ||:逻辑或运算符,如果左边的操作数为真(非零),则不再计算右边的操作数。在这种情况下,++x 的结果是非零,因此不再执行右侧的表达式。
  • 短路现象比运算符优先级级别高,一旦短路优先级不再执行。短路现象是指当使用逻辑运算符(如逻辑与 && 和逻辑或 ||)时,如果左侧的操作数已经确定了整个表达式的结果,那么右侧的操作数将不会被计算。这是为了提高运行时的效率,并避免不必要的计算
  • 无论运算符的优先级如何,如果出现短路现象,左侧操作数的结果将决定整个表达式的值
  • 短路现象可以使左侧操作数的结果在考虑运算符的优先级之前确定整个表达式的结果。这对于逻辑运算非常重要,因为它可以防止在某些情况下执行不必要的操作,从而提高程序的效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值