1.表达式(建议电脑观看)
(1)是运算符链接的操作的式子
(2)带分号;的是语句,不带分号;的是表达式
2.运算符
2.1 算术运算符(双目运算符)需要两个操作数-------》1+1 2*2 4/5
(加) + (减) - (乘) * (除) / (取余) %
取余运算符,两个操作数必须为整数,且不能对0取余
注意:整数 / 整数 得到的还是一个整数。想要小数,在表达式前面乘1.0即可
(1.0)* (8/4)---》得到2.0
这里需注意有隐式类型转换:高精度与低精度进行运算时,结果会向高精度转换(如上)
2.2 关系运算符(双目运算符)
> < >= <= == !=
由关系运算符连接操作数的式子叫关系表达式(注意说法:表达式的值)
常见错误:
(1)5>4>3 --->关系不成立,5>4表达式值为1,然后5>4这个表达式替换成1,即1>3,关系不成立
(2)5>4 ----->关系成立,表达式值为1
(3)5<4 ------>关系不成立,表示式值为0
2.3 逻辑运算符(与或非)
在c中,所有非0的数值都表示真,运算结果为真,其表达式的值一定为1
&&(逻辑与) ----优先级大于逻辑与
|| (逻辑或)
!(逻辑非)
注意:逻辑运算中存在惰性运算
eg:a && b && c(只有a为真时,才会去计算b,a为假,该表达式为假,后面的不用再进行运算)
int a=0;
int b=1;
int c=1;
int d=a&&(b=b-1)||(c=c-1);
printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d);
问:a,b,c,d的值分别多少?
结果:0 1 0 0
解析:
考虑优先级,可以表示成 [a && (b=b-1)] ||(c=c-1)
先运算前面的 [a && (b=b-1)] ,因为a=0,为假,这个表达式为0,且因为惰性运算,b=b-1不会运算 --->可以看成 0 | |(c=c-1)
前面是0,所以后面c=c-1会进行运算 ,即c=0
对于d而言 相当于 0 || 0 所以d=0
综上a=0 ,b不变 b=1 ,c=0,d=0;
2.4 位运算符(二进制运算下)
~ 按位取反(单目运算符)(下面都是双目运算符)
& 按位与 --与0按位与 可以将某一位 置0
| 按位或 --与1按位或 可以将某一位 置1
^ 按位异或 ---》可以将某一位 置反
<< 左移 -->整体往左移,后面补零
>> 右移 -->算数右移(低位丢失,高位补符号位)
--》逻辑右移(低位丢失,高位补0)
2.5 赋值运算符 = (赋值运算符左边必须是一个可写地址)
int a;
a=6+7; //左边的a表示地址
2.6 条件运算符(存在惰性运算)
格式:表达式1 ? 表达式2 :表达式3
表达式1为真,整个条件表达式的值为 表达式2
表达式1为假,整个条件表达式的值为 表达式3
2.7 自增 自减运算符 ++ --
表达式的值 执行完后的值
i++ (先用再加) i i++
++i (先加再用) ++i i++
自减也是如上
2.8 指针运算符(*)
以上列举常见,常用的运算符