c语言—各种运算符***自增自减***短路问题***三目运算符

本文详细介绍了编程语言中的运算符,包括运算符的优先级规则,自增自减运算符的使用,以及逻辑运算符的短路问题。重点讨论了&&和||运算符如何根据左侧表达式的真伪决定是否执行右侧表达式,同时提到了条件运算符(三目运算符)的运用及其嵌套。
摘要由CSDN通过智能技术生成

目录

一、运算符总表(包括优先级)

二、表达式

三、自增自减运算符

四、逻辑运算符(短路问题)

​五、条件运算符(三目运算符 ?  :  ) 


一、运算符总表(包括优先级):

二、表达式

表达式的概念 :运算符配上操作数形成完整可计算的数学式子。
**********只要有表达式,就有计算结果! **********

在复杂的表达式中,通常含有多种运算符,优先级高的运算符先进行运算,例如根据运算符表,乘除运算优先级为3,加减优先级为4,因此先算乘除后算加减。

在优先级相同的情况下,需要看运算符表最右侧一列:结合方向。根据从左到右或者从右到左进行同优先级的表达式运算。

因此,在进行表达式运算时,先看优先级,再看结合性!!!

三、自增自减运算符

自增自减运算符:

    int a, b,c,d;
	a = b = 10;
	c = a++;//先给后加
	d = ++b;//先加后给

谁在前,先操作谁!

c = a++:先赋值后自增,结果为c=10,a=11;

该运算包括两个步骤:第一步:c=a 第二步:a=a+1

因此c得到a的初始值10,然后a自增1变成11

d = ++b:先自增后赋值,结果为d=11,b=11

该运算包括两个步骤:第一步:b=b+1 第二步:d=b

因此b自增1变成11,然后把b的值11赋给d

a++:a在前,++在后 则:先给后加;

++a:++在前,a在后 则:先加后给 (--同理)

四、逻辑运算符(短路问题)

 逻辑运算符:与;或 ;非。

 非:!取向反逻辑,0相反为1,1相反为0.

 与:&& 即并且,a&&b :a和b同为真才真,有一假即假。

 或:|| 即或者,a||b :a和b有一真即真,同假才假。

&&优先级为11,||优先级为12               !优先于&&优先于||

短路问题: 

结构优先,结果后算!!!

	int a = 10, b = 10;
	printf("%d\n", a++ > 10 && ++b > 10);
	printf("a=%d,b=%d\n", a, b);
	printf("%d\n", a++ > 10 || ++b > 10);
	printf("a=%d,b=%d\n", a, b);

上段代码输出结果为:

a++执行后a自增为了11,++b明明先自增后赋值应该为11,可是即++b并没有执行,输出为初始值10,为什么会出现这种结果?

printf("%d\n", a++ > 10 && ++b > 10);

 原因:&&在执行时,发现&&左侧的a++ >10 为0假,由于且的逻辑运算为有一假则假,表达式已经输出为0假,右侧就不会进行判断执行,因此++b表达式没有被执行。在&&左侧判断为假后,没有必要判断&&右侧表达式的真假,就不会进行右侧表达式的执行,这种现象称为短路。总结为:结构优先,结果后算!

printf("%d\n", a++ > 10 || ++b > 10);

在 || 逻辑运算中,|| 左侧的a++ > 10 已经判断为真,由于或的逻辑运算为有一真则真,表达式已经输出1真,则 || 右侧的++b也不会进行判断,++b也不会进行执行,结构优先,结果后算!

五、条件运算符(三目运算符 ?  :  ) 

条件运算符的书写格式:关系逻辑表达式 ? 判断为真的返回值  :  判断为假的返回值  

int a=10;
	char r ;
	if (a%2==0)
	{
		r='T';
	}
	else
	{
		r='F';
	}

 上面的代码为if条件判断,条件为真返回T,条件为假返回F,可以将此使用条件运算符书写:

int a=10;
char r;
r = a%2 == 0 ? 'T' : 'F';

如果a是2的倍数,即a%2==0为真,则返回T,否则返回F。

条件运算符的嵌套:

 使用条件运算符为:

int age = 21; 
	int sex = 1; 
	printf("%c\n", sex ? age >= 22 ? 'Y' : 'N' : age >= 20 ? 'Y' : 'N');

 逗号运算符:表达式结果为最右侧结果

int a,b,c;
int m;
/*
逗号运算符的优先级别最低,()里用","连接了4个表达式。
整个()里称为一个,号表达式。逗号表达式返回值为最后一个表达式的计算结果,即m=12。
*/
m=(a=3,b=4,c=5,a+b+c);
printf("a=%d,b=%d,c=%d,m=%d",a,b,c,m);//打印结果:a=3,b=4,c=5,m=12

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天喜Studio

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

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

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

打赏作者

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

抵扣说明:

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

余额充值