1. 概念
运算符是指能够进行运算的特殊符号
2. 分类
1)单目运算符:一个操作数
2)双目运算符:两个操作数
3)三目运算符:三个操作数,只有一个“ ? :”
3. 常用运算符
3.1 赋值运算符:=
1) 运算符作用:赋予变量数值。 a = 10; a = 1+23+5*9; a = b;
2) 运算符格式:变量 = 变量;变量 = 常量,变量 = 表达式
3) 运算符结合性:右结合性,先运算运算符右边的变量或 表达式的值,再赋值给左边的变量。 a = 1+2; a = b+c; a = 1+f;
注:赋值运算符左边不能是常量或表达式,只能是变量(存储空间)。
3.2 算术运算符:+ - * / %
① 整型跟整型运算:结果只能是整数,不会得到浮点型数据。
② 类型不同:在C语言中,只有类型相同的数据才能进行算数运算,如果类型不同,低精度的数据类型会自动向高精度的数据类型转换,数据类型的精度从低到高排列:
char ---short----int ----long ---float -----double
③ 求余运算:浮点型不能进行求余运算。
#include <stdio.h>
int main()
{
int a,b,c,d;
printf("请输入一个三位数\n");
scanf("%d",&d);
a=d/100;
b=d%100/10;
c=d%10;
printf("百位:%d 十位:%d 个位:%d\n",a,b,c);
}
3.3 关系运算符:>、<、>=、<=、==、!=
用于判断数据之间的关系
格式:变(常)量 表达式 变(常)量
① 关系运算符的运算结果:逻辑结果:逻辑真(1),逻辑假(0)
② 关系运算符的数据:关系运算符运算的时候只关心数据的大小,不关心数据的类型
③ 关系运算符和算数运算符混合使用:先计算再判断
3.4 逻辑运算符:&&、 ||、 !
逻辑与 &&:有一个为假则结果为假(当判断一个表达式为假时则后面不在运算,结果为假),全部为真则结果为真
变量1/表达式1 && 变量2/表达式2 && …… 变量n/表达式n
逻辑或 ||:有一个为真则结果为真(当判断一个表达式为真时则后面不在运算,结果为真),全部为假则结果为假
变量1/表达式1 || 变量2/表达式2 || ……… 变量n/表达式n
运算方向:&&、|| 从左往右开始判断
逻辑非!:取反关系,真变假、假变真
!变量/表达式
#include <stdio.h>
int main()
{
int a=1,b=20,c=10,d=8,f;
a = b==30 && c>20 && (d=10);
printf("a:%d b:%d c:%d d:%d\n",a,b,c,d);
a = b==30 || c>9 || (d=10);
printf("a:%d b:%d c:%d d:%d\n",a,b,c,d);
f = !b ;
printf("a:%d\n",f);
}
3.5 复合运算符
赋值运算符与其他双目运算符的结合使用:+=、-=、*=、/=、%=、<<=、>>=、&=、|=、^=。
计算原则:先计算运算符右侧表达式,再代入左侧计算
#include <stdio.h>
int main()
{
int a=2,b=3,c=4,d=5;
a*=b;
c+=d;
printf(" a:%d c:%d\n",a,c);
}
3.6 自加自减运算符:++、--
变量加一或减一
a++/--:先参与运算在自增/减(语句结束再自增/减)
++/--a:先自增/减再参与运算
可以操作整型和浮点型数据
#include <stdio.h>
int main()
{
int a=2,b=3,c,d;
c=a++;
d=++b;
printf("c:%d d:%d\n",c,d);
}
3.7 逗号运算符
1)运算符作用:将多条语句变成一条语句
2)运算符格式:(语句1,语句2,……语句n)
3)运算符原则:
a)运算方向:从左到右依次运算,所有表达式的值都要进行计算。
b)运算结果:最后一个变量或表达式的值作为整体的值。
#include <stdio.h>
int main()
{
int a,b,c,f = 40;
a =( 12,b = 3,c = 4,45+8,f);
printf("%d\n",a); //40
printf("%d\n",b); //3
printf("%d\n",c); //4
}
3.8 条件运算符:“ ?:”
格式:条件表达式?表达式1:表达式2
原则:先计算条件表达式
1)如果为真则执行表达式1并将其作为结果
2)如果为假则执行表达式2并将其作为结果
#include <stdio.h>
int main()
{
int a;
printf("请输入a的值:\n");
scanf("%d",&a);
a == 5 ? printf("正确\n"):printf("错误\n") ;
}
4. 运算符优先级
(1)括号的优先级是最高的(当你不确定运算符优先级的时候,就加括号)
(2)运算符的操作数越少,优先级越高(单目运算符高于双目运算符)
(3)算数运算符 >关系运算符 >位运算符 >逻辑运算符
(4)与运算符 >异或运算符 >或运算符(包括逻辑运算符和位运算符)
5. 数据类型转换
5.1 自动类型转换
又称为隐性类型转换,自动按照从低到高的顺序转换
例:10/3.0 --- 3.333
char类型与short类型参与运算时自动转换成int类型
5.2 强制类型转换
又称为显性类型转换,顾名思义就是强制让数据根据要求来转换数据类型。
格式:(float)a 、int a
1) char向int、float转换
转int:根据ASCII码表转换成对应的整数
转float:整数部分根据ASCII码表转换成对应的整数,小数部分用0补齐
2) int向char、float转换
转char:对256取余,并将结果赋值给char变量
转float:保留整数位,小数位补0
3) float向char、int转换
转char:去掉小数部分,并对256取余
转int:整数部分为转换结果
#include <stdio.h>
int main()
{
int a = 10;
printf("%d\n",10/3);
printf("%.2f\n",10.0/3);
printf("%.2f\n",10/(double)3);
printf("%.2f\n",(float)a/3);
}