前言
在编程的过程中,对一个或多个变量中的数据进行加减整合的需求是必然的,由此牵涉到了我们今天所讲的内容:运算符和表达式
运算符:即用于进行相关运算的特殊符号
运算符的分类:算术运算符、关系运算符、逻辑运算符、条件运算符、位运算符和赋值运算符
1.算术运算符
算术运算符( 加【+】减【-】乘【*】除【/】取模【%】)
(+ - * / %)均为双目运算符
补充概念:1.表达式:用操作符和括号把运算对象(操作数(数字),变量)连接起来,符合语法规则的式子
2.单目运算符:此运算符仅连接1个操作数
双目运算符:此运算符连接2个操作数......
3.运算顺序(结和性):在优先级相同时,用结和性来判断运算的先后(同一优先级中即使不为同一个符号,其结和性(运算数序)也相同!)
4.优先级:优先级高的运算符优先(先)进行运算(最高1级,最低15级)
运算符 含义 优先级 结合性(运算顺序) 结果 举例
+ 加法运算符 4 从左向右 a与b的和 a+b
- 减法运算符 4 从左向右 a与b的差 a-b
* 乘法运算符 3 从左向右 a与b的积 a*b
/ 除法运算符 3 从左向右 a与b的商 a/b
% 取余(取模)运算符 3 从左向右 a与b的余数 a%b
补:a/b=商 a%b=余
注:与数学中的运算符进行区分(1.运算符不可省略
2.在”=“的左边不可为表达式,只能为变量)
#include<stdio.h>
int main()
{
int a=4;
int b=5;
int c=6;
b+c=a;
printf("%d %d %d",a,b,c);//此时在输出的时候一定会报错,b+c=4,但无法判断b,c的具体值
return 0;
}
注: 除法分类: 1.整数除法:除号两边均为整数。结果:只取商
如:7/2=3(同种类型的数据相除,结果也为这种数据,多余的会丢失)
但如果想要保留小数,就可以用浮点数除法
2.浮点数除法:在两个操作数中至少有一个为浮点数,此时的结果即会保留小数点后的部分(默认保留6为小数)
2.比较运算符
比较运算符:用于两个表达式之间的比较
如:
#include<stdio.h>
int main()
{
int a=10;
int b=20;
int x=a>b;
printf("%d\n",x);//若为真,输出:1,若为假,输出:0;
return 0;
}
3.条件运算符
条件运算符:由?:组成,且必须同时存在
一般形式:表达式1?表达式2:表达式3
特点:①三目运算符②优先级:13级③结合性:从右至左
运算过程:1.计算表达式1:结果判断为真 :执行表达式2,使用表达式2的式子值作为这个条件运算符表达式的结果
结果判断为假 :执行表达式3,使用表达式3的式子值作为这个条件运算符表达式的结果
如:①
比较两个数的大小
#include<stdio.h>
int main()
{
int a=10;
int b=5;
printf(”%d\n",a>=b?a:b)//a>b,输出a
return 0;
}
②
再比较多个(如:3个)数的大小时:可以先比较出其中两个数的较大值,在把这个较大值与第三个数比较
注:在使用条件运算符的时候,其它式子不可用括号括住
4.逻辑运算符
逻辑运算符包括逻辑与(&&),逻辑或(||),逻辑非(!),其优先级分别为:10,11,2
结合性:从左到右,从左到右,从右到左
逻辑与:一真则真,全假才假
逻辑或;一假则假,全真为真
逻辑非:颠倒黑白
5.赋值运算符:=和复合赋值
5.1区分初始化和赋值:
初始化;在创建变量的时候,给变量一个初始值。(仅在创建变量的时候)
赋值:在变量创建后,再给变量一个值。(随时都可)
5.2赋值运算符:
左边=右边,右边的值通过赋值运算符赋值给左边的储存空间
注:左右的类型要匹配,如若不匹配会出现意外
右边只要为确切的数字即可(常量,变量,表达式),左边为变量
注:左边不可为表达式
5.3连续赋值
如:
#include<stdio.h>
int main()
{
int a=2;
int b=3;
int c=4;
c=b=a+3;//先把a+3=5的结果值赋给b,b=5再赋给c
printf("%d %d %d",a,b,c);//a=2,b=c=5
return 0;
}
注:①赋值顺序:从右至左
②C语言虽然支持这样的赋值,但写出的代码不容易理解,建议还是拆开来写,这样方便观察代码的执行细节(便于调试)
5.4复合赋值符
在写代码的时候,我们有时需要对一个变量本身的值进行改变,上述运算符在计算的过程中输出的运算结果可能与变量中储存的数值不同,但在运算后,变量中储存的数值不会发生改变。
而复合运算符却能够做到对变量本身的值进行操作后在赋给自己。
如:
int a=2;
a=a+3
a=a-3
int a=2;
a+=3;
a-=2;
这两个式子的效果完全等效。
6.单目运算符:++,--,+,-
6.1++和--
(++),(--)为自增,自减运算符,都分为前置++,后置++,前置--和后置--
前置和后置各有不同,但变量本身的值均发生了变化,仅这个自增,自减运算符的运算结果是否仍为原来的值。
我们在这里以++为例
①前置++(b=++a)
简单来说就做了两件事:①a=a+1②b=a(把加过1的a的数值赋给b使用)
实际上:
#include<stdio.h>
int main()
{
int a=0;
int b=0;
b=++a;
printf("%d %d",a,b);//a=b=1
return 0;
}
在内存中的a变量只有储存数据的作用,运算和处理数据为在内存以外的区域CPU中进行。(在CPU中有一小部分空间会用与储存运算结果)
在内存中保存a=0,先在CPU中完成加1后,赋值给a,此时再把新的a作为++a的运算结果储存在CPU中
b=++a,b被赋予的是++a这个表达式的值(运算结果),而非变量a中的值
计算口诀:先加1,后使用(a+=1与++a等效)
②后置++(b=a++)
简化过程:①b=a(先不加,首先把未加1的a赋值给b)②a=a+1
实际上:先把内存中的a值复制一份,作为a++这个表达式的运算结果(表达式的值),再执行加1操作,赋值给a
计算口诀:先使用,后加1
#include<stdio.h>
int main()
{
int a=0;
int b=5;
b=a++;
printf("%d %d",a,b);//a=1,b=0
return 0;
}
6.2+和-
【+】【-】不同于加减运算符,为两种单目运算符
【+】对正负值完全没有影响,是一个完全可以省略的运算符,但写了也不会报错
7.表达式的运算规则
有多个运算符组成的表达式的运算规则:
①把优先级最低的运算符看为短路,分为两段进行计算
②根据优先级最低的运算符的结合性(运算顺序)【最低级的运算符为大老板】
注:①若为同优先级运算符和进行运算符看为更低级的运算符
②计算机很懒惰在被最低级的运算符分开后会满足以下规则:
1.逻辑或以左为真值,那么已右的部分不会加入运算
2,逻辑与以左为假值,那么已右的部分不会加入运算

8.强制类型转换
如:
int a=3.14
///a为int类型,3.14为double类型,两边类型不一致,编译器会发出警告
为了消除警告,我们可以使用强制转换:
语法:目标类型 变量名=(目标类型)数据;
int a=(int)3.14
prinf("%d",a);//a=3
但中国有句老话说的好,“强扭的瓜不甜”,强制转化只有在万不得已的时候才使用,不用强制转换就能实现预期效果自然是更好的。
结语
定义了变量就可以加以使用,计算机作为简化人们生活方式的一种工具,使用恰当的运算符以达到预期的效果是必不可少的,期望能在阅读完本文后对运算符与表达式能有一个更加深刻的理解把!!
好了,纵有万般不舍我们也到分别的时刻了。求关注,点赞❤
本文详细介绍了编程中的运算符种类、优先级、结合性,包括算术运算、比较运算、逻辑运算、条件运算和赋值运算,以及运算符在表达式中的运用规则和类型转换,帮助读者掌握编程基础。
6927





