C语言基础之运算符和表达式-笔记四
程序员文章站
2024-03-08 09:32:58
...
1、运算符
(1) 分类(根据操作数的数量):一元运算符、二元运算符和三元运算符
(2) 分类(根据操作数的用途):赋值运算符、算术运算符、关系运算符、逻辑运算符、位运算符……
(3)运算符的优先级和结合方向
1)按运算符的优先级高低次序执行。例如,先乘除后加减。
2)如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按C语言规定的结合方向(结合性)进行。结合性是指该操作数是先与左边的运算符结合,还是先与右边的运算符结合。
3)用法
指针最优,单目运算优于双目运算,如正负号。
先乘除取余,后加减。
先算术运算,后移位运算,最后位运算。
特别注意:1<<3+2 & 7等价于(1<<(3+2))&7
(4)示例
1)取余运算--符号位由被除数(第一个)决定,被除数只能是整数
printf("%d\n",5%3);//输出:2
printf("%d\n",5%-3);//输出:2
printf("%d\n",-5%3);//输出:-2
printf("%d\n",-5%-3);//输出:-2
2)++ --运算符
int num=3;
printf("%d\n",num++);//表达式:3 ++后置,先用后运算 num:4
printf("%d\n",++num);//表达式:5 ++前置,先运算后用 num:5
printf("%d\n",--num);//表达式:4 --前置,先运算后用 num:4
printf("%d\n",num--);//表达式:4 --后置,先用后运算 num:3
3)整数相除取整
printf("%d\n",22/5);//输出:4
整数相除若要保证精度,则除数需要保留一位小数,如下:
int sum=22;
float average;
average=sum/5;
printf("%f\n",average);//输出:4.000000
average=sum/5.0;
printf("%f\n",average);//输出:4.400000
4)赋值
int a,b,c;
a=b=c=10;
或int a=10,b=11,c=12;
5)判断
if(a==1)相当于if(1==a)
if(a>3&&a<5)
if(a>3||a<5)
6)清零
如:清零:1011 0101 第八位清零
则:1<<7;[(1<<7)取反]->0111 1111;1011 0101与0111 1111相与->0011 0101
如:清零:0101 1101 第三、四、五位清零
则:111(7)<<2;[111(7)<<2取反]->1110 0011;0101 1101相与1110 0011->0100 0001
7)运算符数据类型转换(由低到高)
char->short->int(long)->unsigned int->float->double(long double)
2B 2B 2/4B 2/4B 4B 8/16B
double不能直接转换为int,只能先转为float,否则精度丢失。
8)强制类型转换
float x,f;
f=3.14159;
x=(int)f;
printf("f=%.4f\n",f);//输出:f=3.1416
printf("x=%.2f\n",x);//输出:x=3.00
2、表达式
(1)概念
用运算符和括号将操作数连接起来的、符合C语言语法规则的式子,称为表达式。
(2)说明
1)运算符和操作数的有效组合
2)操作数可以是变量、常量或者函数
3)在程序执行的过程中,变量的实际值和表达式中出现的常量一起使用
(3)分类: 算术表达式;关系表达式;逻辑表达式;函数表达式。
运算符类型表:
(4)详注
1)算术运算符
除%操作符,其余操作符既可用于浮点型也可用于整数类型。
当/操作符的两个操作数都是整数时,执行整除运算,其他情况执行浮点数除法。
2)移位操作符
左移位:值最左边的几位被丢弃,右边多出来的几个空位则由0补齐
3)sizeof—计算数据类型所占字节数(长度运算符)
功能:用于判断其操作数的类型长度,以字节为单位,操作数既可以为表达式,也可为单个变量,亦可是两边加上括号的类型名,如sizeof(int)//返回整型变量的字节数 sizeof x //返回变量x所占据的字节数,定义上字符变量的长度为1个字节,当sizeof的操作数为数组名时,返回该数组的长度,以字节为单位,在表达式的操作数两边加上括号也是合法的,如sizeof(x) 判断表达式的长度并不需要对表达式进行求值,所以sizeof(a=b+1)并没有向a赋任何值。
4)(类型) —类型转换
将强制类型转换放在一个表达式前面只会改变表达式的第一个项目的类型。如果要对整个表达式的结果进行强制类型转换,则必须把整个表达式用括号括起来。
5)关系操作符
关系操作符产生的结果都是一个整型值,而不是布尔值,如果两端的操作数符合操作符指定的关系,表达式得结果是1,若不符合,表达式的结果是0,关系操作符的结果为整型值,故可以赋值给整型变量。
测试语句”不等于0”可用关系操作符实现,也可通过测试表达式的值来完成,如下:
if(expression !=0)…相当于if(expression)…
测试语句”不等于0”如下:
if(expression ==0)…相当于if(!expression)…
6)赋值运算符
单个=号用于赋值操作,双==号表示比较运算。
7)条件运算符
条件操作符?:接受3个参数,如果第一个操作数值为真,则表达式值为第二个操作数的值,否则为第三个操作数的值
8)逗号操作符把两个或更多个表达式连接在一起,从左到右依次进行求值,整个表达式的值就是最右边那个表达式的值。如:
逗号表达式:表达式1,表达式2 ,…,表达式n
其求值过程是分别求表达式1、表达式2…表达式n的值,并把最后一个表达式n的值作为整个逗号表达式的值。
编辑 2020-4-20 21:55
注:本文旨于作为自己的学习笔记,不作他用。
上一篇: Java gbk转utf-8
下一篇: python的字符串 --综合练习题