分析题6:前置++、后置++,&&,||关系式中计算abcd的输出值

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()//
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf("a=%d\n", a);
	printf("b=%d\n", b);
	printf("c=%d\n", c);
	printf("d=%d\n", d);
}
//i = a++ && ++b && d++;
// i=0++ && ++2 && 4++
//0++先运算后++,就是先去做&&运算,&&运算时候只要
//一个为0,结果为0,所以0++之后的&& ++2 && 4++,
//是没有算的,b,c,d还是原来的值
//0++这是自增变成1
//最后结果就是a=1,b=2,c=3,d=4

在这里插入图片描述

//i = a++ && ++b && d++;
// i=0++ && ++2 && 4++
//0++先运算后++,就是先去做&&运算,&&运算时候只要
//一个为0,结果为0,所以0++之后的&& ++2 && 4++,
//是没有算的,b,c,d还是原来的值
//0++这是自增变成1
//最后结果就是a=1,b=2,c=3,d=4

逻辑与,这个事,只要是&&左边为0,右边就不算了
为什么是左边,是因为程序是从左往右,从前往后执行
//------------------------------------------------------------------------------------------------------
这次把a的初始从0改成1,是怎样的呢?

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()//
{
	int i = 0, a =1 , b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf("a=%d\n", a);
	printf("b=%d\n", b);
	printf("c=%d\n", c);
	printf("d=%d\n", d);
}
//i = a++ && ++b && d++;
//     1  &&  3  &&  4   后置++数值直接落下来,前置++先运算再落下来 ——<第一步>
//     2  &&  3  &&  5   把后置++没运算完的部分,运算完——<第二步>
//     a=2   b=3  c=3  d=5  统计结果——<第三步>

在这里插入图片描述
//i = a++ && ++b && d++;
// 1 && 3 && 4 后置++数值直接落下来,前置++先运算再落下来 ——<第一步>
// 2 && 3 && 5 把后置++没运算完的部分,运算完——<第二步>
// a=2 b=3 c=3 d=5 统计结果——<第三步>
//-------------------------------------------------------------------------------------------------------
我们把&&运算改作或运算,又会是什么结果呢?

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()//
{
	int i = 0, a =1 , b = 2, c = 3, d = 4;
	i = a++ || ++b || d++;
	printf("a=%d\n", a);
	printf("b=%d\n", b);
	printf("c=%d\n", c);
	printf("d=%d\n", d);
}
//i = a++ && ++b && d++;
//     1  &&  3  &&  4   后置++数值直接落下来,前置++先运算再落下来 ——<第一步>
//     2  &&  3  &&  5   把后置++没运算完的部分,运算完——<第二步>
//     a=2   b=3  c=3  d=5  统计结果——<第三步>

//i = a++ || ++b || d++;
//     1  ||  3  ||  4   后置++数值直接落下来,前置++先运算再落下来 ——<第一步>
//     2  ||  3  ||  5   把后置++没运算完的部分,运算完——<第二步>
//注意运行到这一步的时候,算出了a++是2,就是为真,或运算只要运算符前面为真了,
//前面的真就是结果了,所以a++后面的部分是不会运算的
//     a=2   b=2  c=3  d=5  统计结果——<第三步> 

在这里插入图片描述
//i = a++ || ++b || d++;
// 1 || 3 || 4 后置++数值直接落下来,前置++先运算再落下来 ——<第一步>
// 2 || 3 || 5 把后置++没运算完的部分,运算完——<第二步>
//注意运行到这一步的时候,算出了a++是2,就是为真,或运算只要运算符前面为真了,
//前面的真就是结果了,所以a++后面的部分是不会运算的
//所以最后结果就是a=2 b=2 c=3 d=5 统计结果——<第三步>

小结:
若是&&关系,&&左边为假,右边就不要算了;
若是||关系,||左边为真,右边就不要算了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值