3.5.4增量运算符和增量表达式
1.前缀运算:
i=1;
j=i++;// 先i自增,再把2赋给j
2.后缀运算:
i=1;
j=i++;//把i=1赋给j在i加1
注:结合方向:先右后左;
ex.j=-i++相当于 -(i++)
3.5.5关系运算符和关系表达式:
1.关系运算符:
双目运算符,左结合性优先级高于赋值运算符低于算术运算符。
x+y<s+t等价于(x+y)<(s+t)
2.关系表达式:
ex.3>5,i<j*2,(x=2)>(b=4)等等,关系式表达的值是一个逻辑值,只有“真”“假”两种。
(1)若为真,1;(2)若为假,0;
注:对于以下关系表达式,要注意:
#include<stdio.h>
int main()
{
int a=3,b=2,c=1;
printf("%d\n"a>b>c);
return 0;
}
此时输出结果为0。原因:按左结合性有(a>b)>c,先判定a>b 是否正确,为真,则值为1,再对比1与c的大小关系,不满足1>1,则为假,输出0.
3.5.6逻辑运算符和逻辑表达式:
1.逻辑运算符:
&&(逻辑与) ||(逻辑或) !(逻辑非)前两个是双目运算符(左结合性),!是单目运算符(右结合性)
a&&b:a 和b 都为真,才为真;
a||b:a,b右一个为真,即为真;
!a: a为真时,!a为假,a为假时,!a为真。
优先级:!>算术运算符>关系运算符 >&&>||>赋值运算符
2.逻辑表达式:
ex.a=3.5,b=4,a&&b值为1.
处理表达式时,采用不完全计算法:
(1)&&表达式中,&&左端为假,则不算右端;
(2)||表达式中,||左端为真,则不算右端。
3.5.6条件运算符和条件表达式:
条件运算符为三目运算符,格式:
表达式1?表达式2,表达式3(1为真则2,假为3)
//ex.输入两个数,输出其中较大的数。
#include<stdio.h>
int main()
{
float a,b,max;
printf("tishi");
scanf("%f%f",&a,&b);
max=(a>b)?a:b;//判断
printf("max=%f\n",max);
return 0;
}
3.5.9位运算符:
、
1.按位运算符(&)
功能:将参与运算的两数各对应的二进位相与,对应两个二进制位均为1,结果位才为1,否则为0.
2.按位或运算符(|)
功能:将参与运算的两数各对应的二进位相或,对应两个二进制位有一个位1时,结果就为1,两个位都为0,才为0.
3.按位异或运算符(^)
功能:将参与运算的两数各对应的二进位相异或,对应二进制位不相等时,结果位1,否则位0.
4.按位取反运算符(~)
功能:将参与运算的两数各对应的二进位按位求反。1改0,0改1
注:负数的补码为按位取反再加一
5.左移,右移运算符:(<</>>)
注:有符号数,右移时,符号位随同移动。正数:高位补0,负数:符号位为1,最高位补0或1(TurboC) 等规定补1;
6.位运算赋值运算符:
组合 >>=,<<=,&=, 等
7.不同类型数据的混合位运算:
两个运算对象类型不同,系统会将其右端对齐,若正数或无符号数:高位补0,负数: 高位补1.