【填坑指南】[C语言]=,==的特殊运算

验证代码

#include <stdio.h>

int main(void) {
  int x;
  int y;
  int z;
  int s;

  x = 2;
  y = 3;
  z = 4;
  s = (x = y == z);
  printf("%d,x=%d,y=%d,z=%d\r\n", s, x, y, z);

  x = 2;
  y = 3;
  z = 4;
  s = (x == y == z);
  printf("%d,x=%d,y=%d,z=%d\r\n", s, x, y, z);

  //x = 2;
  //y = 3;
  //z = 4;
  //s = (x == y = z);
  //printf("%d,x=%d,y=%d,z=%d\r\n", s, x,y,z);

  x = 2;
  y = 3;
  z = 4;
  s = (x = y = z);
  printf("%d,x=%d,y=%d,z=%d\r\n", s, x, y, z);

  x = 2;
  y = 3;
  z = 4;
  s = ((x = y) == z);
  printf("%d,x=%d,y=%d,z=%d\r\n", s, x, y, z);

  return 0;
}

运行结果

0,x=0,y=3,z=4
0,x=2,y=3,z=4
4,x=4,y=4,z=4
0,x=3,y=3,z=4 

分析

运算符优先级
“== ” 的优先级要比=的优先级高,“==” 的结合方向是从左到右,“=” 的结合方向是从右到左。

x = y == z

先运算“y==z”,结果为0。
后将”y==z“运算的结果0赋值给x。
所以,s=0,x=0,y=3,z=4。

x == y == z

先运算"x==y", 结果为0。
后将"x==y" 的结果0同z进行"=="计算,结果为0。
所以s=0,x=2,y=3,z=4。

x == y = z

先运算"x==y", 结果为0。
然后将z赋值给0,不符合C语言的语法。
所以,此种计算不能实现。 

x = y = z

先运算"y=z", 结果为y=4,z=4。
后运算"x=y", 结果为x=4,y=4,z=4。
所以,s=4,x=4,y=4,z=4。 

(x = y) == z

先运算"x=y", 结果为x=3,y=3。
后运算"x==z", 结果为0, x=3,y=3,z=4。
所以,s=0,x=3,y=3,z=4 。 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值