C语言操作符有以下分类:
算数操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号操作符 下标引用 、函数调用和结构成员
一、算数操作符
加(+) 减(-) 乘(*) 除(/) 求模(%)
1)%操作符只能用于两个整数之间的运算,其他的操作符可以作用于整数和浮点数。
2)对于/操作符,当两个操作数都是整数时执行整数除法。只要有一个操作数是浮点数就是浮点数除法。
3)%操作符参与运算的两个整数返回的是整除之后的余数,/操作符参与运算的两个整数返回的是整除之后的商。
二、移位操作符
左移操作符(<<):左边抛弃,右边补0
右移操作符(>>):1)逻辑移位--左边用0填充,右边丢弃
2)算术移位:左边用原该值的符号位填充,右边丢弃
三、位操作符
按位与(&) 按位或(|) 按位异或(^)
1)位操作符他们的操作数必须都是整数。
2)参与运算的操作数,是将他们的二进制(比特位)进行逐位运算。
3)&操作符只有当两个比特位都是1时与的结果才为1,以外均为0。
4)| 操作符只有当两个比特位都是0时或的结果才为0,以外均为1。
5)^操作符参与运算的是两个相同的操作数结果就会清零,任一个数与0按位异或得到的二进制序列不变,与1按位异或得到的二进制序列每位均取反。
四、赋值操作符
只有赋值操作符(=)可以让你改变一个你之前不满意的值。任何两个操作数参与运算时只要不经过赋值运算,这两个操作数其自身的值是不会发生变化的!
注意:赋值运算和初始化是两个不同的概念!初始化时(int i=0;),系统会为这个变量(i)开辟空间同时默认这是空间的值(0)。而赋值运算时(i=1;),是将这个空间的值改变(将1改为0)。
复合赋值符:+= -= *= /= %= >>= <<= &= |= ^=
五、单目操作符
逻辑反(!) 负值(-) 正值(+) 取地址(+) 求操作数的类型长度(sizeof) 对一个数的二进制数按位取反(~) 自增运算(++) 自减运算(--) 间接访问操作符、解引用操作符(*) 强制类型转换((类型))
1)以上操作符参与运算的只需要一个操作数即可。
2)自增操作符分为前置和后置,前置是先将值进行+1操作,然后再去用这个数。后置是先将数拿出来去使用,使用完了之后再进行+1操作。
3)强制类型转换仅仅改变了空间的类型,并没有改变这个数据,和转化是不同的概念。
4)切记sizeof是操作符,并不是一个函数。
六、关系操作符
大于(>) 大于等于(>=) 小于(<) 小于等于(<=) 相等(==) 不相等(!=)
1)对浮点数来说要特别注意,并没有严格意义上的相等。它是用精度范围来判断两个数是相等的。
2)执行相等操作(==)时,可能会不小心写成赋值操作(=)。例如:if(x=5)//处理事务
因此建议做相等比较时,将常数写在左边(5==x)。例如:if(5==x)//处理事务
这样不小心输错成if(5=x),系统就能在编译时报错
七、逻辑操作符
逻辑与(&&) 逻辑或(||)
1)&&操作符前后两个操作数均为真结果才为真。
2)|| 操作符前后两个操作数均为假结果才为假。
3)逻辑与和按位与是不同的概念,前者的结果是布尔型,不是1(真)就是0(假),而后者是将二进制进行逐位运算的,结果是个数。
八、条件操作符
exp1 ? exp2 : exp3 ;
三目运算符:当exp1为真时结果为exp2,假时结果为exp3
类似于:if(exp1) {exp2} else {exp3}
九、逗号表达式
exp1,exp2,exp3,……expN
1)逗号表达式,就是用逗号隔开多个表达式。
2)逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
十、下标引用、函数调用和结构成员
1)[ ]
操作数:一个数组名+一个索引值
2)( )
函数调用操作符
一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
3)访问一个结构体的成员
. 结构体 . 成员名(通过结构体直接访问内部元素)
-> 结构体指针 -> 成员名(通过指针访问结构体内部元素)
注意:结构体、数字、指针都属于数据类型,只不过是自定义数据类型