笔记整理3: 运算符与表达式
常用运算符及其表达式:
如:+,-,*,/,%,=
(1),同类型运算得同类型结果。
(2),低类型与高类型运算得高类型结果。
(3),赋值运算自右向左。
(4),有符号运算,正负号与最左侧数值相同。
(5),先 * / 后 % 在 + - (优先性)。
例(表达式):
a=5/2; a=2
a=5.0/2; a=2.0 //往高类型转
5 % -2 = 3
-5 % -2 = -5
各类型的优先级如下:
char–>short–>int–>long–>float–>double
实用型运算符及其表达式:
(1),复合赋值运算符…
含:+=,-=,*=,/=,%=,
例(表达式):
a+=3; 等同于 a=a+3
x/=y+2; 等同于x = x /(y+2)
其优先级仅高于逗号运算符
(2),增量运算符…
含: ++(自增运算符),- -(自减运算符)
注意:x++(或x- -)与++x(或- -x)的意义并不相同。一个是先赋值再自增,另一个是先自增再赋值。
例(表达式):
int a=6;
printf("%d\n",a++);
printf("%d",++a);
输出结果:
6
8
(3),逗号运算符…
含:一逗( , ) 二逗( , , )
意义:不管一逗还是二逗,整个表达式的值都等于括号内最后一个表达式的值
例(表达式):
int a=6,b,c,d;
b=3+6,a/2;
c=(3+6,a/2);
d=(2,3,a++);
printf("%d\t%d\t%d",b,c,d);
输出结果:
9 3 6
(4),关系运算符…
含:>,>=,<,<=,==,!=,
注意:
1,前面四种的优先级大于后面的两种。
2,(a>b) 若该条件为真,则整个表达式等于1,否则整个表达式的值为0。
例(表达式):
int a,b;
a=(3>4);
b=(3<4);
printf("%d\t%d",a,b);
输出结果:
0 1
(5),逻辑运算符…
含: !(非),&&(与),||(或)
意义:
x | y | !x | x&&y | x\\y(代替一下竖杠) |
---|---|---|---|---|
真 | 真 | 假 | 真 | 真 |
真 | 假 | 假 | 假 | 真 |
假 | 真 | 真 | 假 | 真 |
假 | 假 | 真 | 假 | 假 |
这里的真假最后得出的结论也是整个表达式是1或0
例(表达式):
int a,b;
a=(3&&4);
b=(3<4||3>4); //条件运算符的优先级大于逻辑运算符
printf("%d\t%d",a,b);
输出结果:
1 1
其它类型运算符及其表达式:
(1),强制类型转换运算符
形式:(类型名)(表达式)
含义:将后面表达式的最终类型转换为前面括号内的类型。
例:
int a=3,b=5;
printf("%f",(float)(a+b));
输出结果:
8.000000
(2),条件运算符及其表达式
形式:表达式1? 表达式2:表达式3
含义:若表达式1为真,则执行表达式2,否则执行表达式3。
(在后面我们会用IF条件语句将其代替)
例:
int a=3,b=5,c=6,max;
max=(a>b)? a:(b>c)? b:c; //但有些情况下,还是很好用的
printf("%d",max);
输出结果:
6
(3),求字节运算符
形式:sizeof(数据类型名)或sizeof(表达式)
注意:sizeof常用于计算字符串所占空间的大小,其与strlen不同的是,后者是用来计算字符串的长度。
例:
int a,b,c,d;
char str1[] = "abcde";
char str2[8] = {'a'};
char str3[] = "01234";
a=sizeof(str1) ;
b=sizeof(str2) ;
c=sizeof(str3) ;
d=strlen(str2);
printf("%d\t%d\t%d\t%d",a,b,c,d);
输出结果:
6 8 6 1