一、操作符分类
算数操作符 | + - * / % |
移位操作符 | << >> |
位操作符 | & | ^ |
赋值操作符 | = += -= *= /= %= >>= <<= &= |= ^= |
单目操作符 | ! - + & sizeof ~ -- ++ * (类型) |
关系操作符 | > >= < <= != == |
逻辑操作符 | && || |
条件操作符 | exp1?exp2:exp3 |
逗号表达式 | exp1,exp2,exp3...expN |
下标引用、函数调用和结构成员 | [] () . → |
二、操作符详述
- 算数操作符:+ - * / %
①% 操作符的两个操作数必须为整数,返回的是整除之后的余数。其他的几个操作符可以作用于整数和浮点数。
②对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
example: 1/2 = 0 1.0/2 = 0.5 - 移位操作符
<<: 左移操作符
规则:左边抛弃,右边补0。
>> :右移操作符。
a.逻辑移位:左边补0,右边丢弃。
b.算数移位:左边用原该值符号位填充,右边丢弃。
注意:内存中存二进制数的补码! - 位操作符
& :按位与
| :按位或
^:按位异或
注意:他们的操作数必须为整数。 - 赋值操作符
= += -= *= /= %= >>= <<= &= |= ^=
example:x = x+10 相当于 x += 10 - 单目操作符
! :逻辑反操作
-:负值
+ :正值
& :取地址
sizeof:操作数的类型长度(字节为单位)
~ :对一个数二进制按位取反
-- :前置--(先--、再赋值)、后置--(先赋值、再--)
++ :前置++(先++、再赋值)、后置++(先赋值、再++)
* :间接访问操作符(解引用操作)
(类型):强制类型转换 - 关系操作符
> >= < <= != ==
注意:=和==不要搞混淆 - 逻辑操作符
&& ||
注意:只有1和0 - 条件操作符
exp1?exp2:exp3:exp1为真,执行exp2,否则执行exp3。 - 逗号表达式
exp1,exp2,exp3,…expN:
逗号表达式,就是用逗号隔开的多个表达式。从左到右依次执行,整个表达式的结果是最后一个表达式的结果。 - 下标引用、函数调用和结构成员
[]:下标引用操作符
():函数调用操作符 接受一个或者多个操作数:第一个操作数就是函数名,剩余的操作数就是传递给函数的参数。
访问一个结构的成员:.
. :结构体.成员名
→ :结构体指针→ 成员名