c语言多项逻辑运算符的运算方式

我们常用逻辑与(&&)和逻辑非(||)进行分支结构中的逻辑判断。那么多个逻辑判断符的运算方式如何运行的呢?

如下

int a = 0;
	int b = 2;
	int c = 3;
	int d = 4;
	int i = a++ && b++ && c++ &&d++;
	printf("a=%d b=%d c=%d d=%d",a, b, c, d);

根据自加的运算方式,我们可以得到结果a=1;b=3;c=4;d=5.

那么结果真的是这样吗?

我们发现,只有a自加了,这是由于计算机为了简化计算做的设定,在逻辑与(&&)运算中,若首操作数出现一个0之后便会停止后续的计算,所以在上式中a++先作为0加入计算后自加。而第一个逻辑与一旦发现了0就停止运算,运算结果为0,b++没有被运算。接着运算下一个逻辑与表达式0&&c++同理可知该逻辑与运算第一个操作数为0.不进行后续运算,同理还有下一个逻辑与0&&d++,所以只有a自加了.

逻辑或也能同理,首操作数数不为0便停止后续运算。

	int a = 0;
	int b = 2;
	int c = 3;
	int d = 4;
	int i = a++ || b++ ||c++ ||d++;
	printf("a=%d b=%d c=%d d=%d",a, b, c, d);

 

逻辑或(||)运算首操作数为0,进行下一个操作数的计算。此时a++,b++。而a++||b++的结果为1.所以在下一个逻辑或(1||c++)中不进行后续运算,直接输出1。同理可得,我们也能知道d++不会被运行。

所以只有a,b自加了1.打印结果为a=1,b=3,c=3,d=4

既然知道了逻辑与(&&)和逻辑或(||)的运算规律了,我们来了解一下逻辑与和逻辑或的混合运算形式。

如下

int a = 0;
	int b = 2;
	int c = 3;
	int d = 4;
	int i = a++ && b++ || c++ || d++;
	printf("a=%d b=%d c=%d d=%d",a, b, c, d);

 

我们可将该逻辑运算分为三步

第一步是先运算a++&&b++,逻辑与的第一个数为0,停止运算,运算结果为0.所以此时a自加1,b没有自加。

第二步是将a++&&b++的结果视为0,将式子变成0||c++,由逻辑与的计算方式可知,第一个操作数为0,继续往后运算,此时c++,运算结果为1.

第三步同理,将式子化为1||d++。由于第一个操作数的结果为1,停止运算下一个操作数,逻辑或运算中有一个数非0,运算结果为1.

综上,我们可得到该过程自加的操作数有a,c。所以输出结果为a=1,b=2 c=4 d=4

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码小豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值