1.操作符分类:
算数操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用,函数调用和结构成员
2.算数操作符
+ - * / %
1.除了%操作符以外,其他的几个操作符可以作用于整数和浮点数
2.对于 / 操作符如果两个操作数都为整数,执行 整数除法。而只要有浮点数执行的就是浮点数除法。
3.%操作符的两个操作数必须为整数,返回的是整除之后的余数。
3.移位操作符
<<左移操作符 >>右移操作符
注意:移位操作符只能操作整数,负数也不要那么操作,c语言没定义
3.1左移操作符
移位规则:左边抛弃,右边补0
3.2右移操作符
移位规则:分两种
第一种:逻辑移位:左边用0填充,右边丢弃
第二种:算术移位:左边用原该值的符号位填充,右边丢弃
4.位操作符
位操作符有:
& 按位与
| 按位或
^ 按位异或
这些操作数字必须是整数
5.赋值操作符
赋值操作符是一个很棒的操作符,他可以让你不满意的值,重新变成你满意的值
int a=10; // 不满意
a=20; //满意
复合赋值符
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=
比如:
int a=10;
a=a+10;
a+=10;//复合赋值
6.单目操作符
6.1单目操作符介绍
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(字节为单位)
~ 取一个数的二进制按位取反
-- 前置,后置
++ 前置,后置
* 间接访问操作符(接近用操作符)
(类型) 强制转换类型
7.关系操作符
>
>=
<
<=
!=
==
在编程中,记住,=是赋值,==才是等于
8.逻辑操作符
&& 逻辑与
|| 逻辑或
1&2------->0
1&&2----->1
1|2-------->3
1||2------->1
9.条件操作符
exp? exp2 : exp3
10.逗号表达式
exp1,exp2,exp3,....expN
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果
11.下标引用,函数调用和结构成员
[ ]下标引用
( )函数调用
结构体.成员名 结构体指针->成员名
12.表达式求值
隐式类型转换
c的整形算术总是至少以缺省整形类型的精度来进行的。
为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整形,这种称为整形提升。
char a,b,c
a=b+c;
b和c先变成整形再进行加法运算
int main()
{
char a= 0xb6;
short b= 0xb600;
int c=0xb6000000;
if(a==0xb6)
printf("a");
if(b==0xb600)
printf("b");
if(c==0xb6000000)
printf("c");
return 0;
}
//打印c
例子中a,b要进行整形提升,a和b整形提升后为负数,c不需要。
所以输出结果是c
13.算数转换
如果某个操作符的各个操作数属于不同类型,那么除非其中一个操作数转换为另一个操作数类型,否则操作无法进行。下面的层次称为寻常算术转换。
long double
double
float
unsigned long int
long int
unsigned int
int
float f=3.14;
int num=f;
存在隐式转换,会有精度丢失
14.操作符的属性
复杂表达式的求值有三个影响的因素:
1.操作符的优先级
2.操作符的结合性
3..是否控制求值顺序
两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。
如果我们写出的表达式不能通过操作符的属性来确定唯一 的计算路径,那这个表达式就是存在问题的。
大家阅读完这篇文章,相信大家对操作符也有了一定的了解了
我们下次再见吧~~~