一、算术操作符
1.+
(加)
2.-
(减)
3. *
(乘)
4. /
(除)
5. %
(取模)
特别说明:
(1)%操作符的两个操作数必须是整数,返回的是整除之后的余数,如5%2返回的是1。
(2)若/操作符的两个操作数都是整数,则执行整数除法;若其中有操作数是浮点数,则执行浮点数除法。
二、移位操作符
<<
(左移操作符)>>
(右移操作符)
移位规则:
(1)左移:(*2的效果)
左边丢弃,右边补0
如b=a<<1:a不变,b为a左移1位后的结果
(2)右移:(/2的效果)
逻辑移位:左边补0,右边丢弃
算术移位:左边补原来的符号位,右边丢弃(编译器通常采用)
(3)移位不要移动负数位,这是标准未定义的。
(4)浮点数不能移位
三、位操作符
1.&
(按位与)
2. |
(按位或)
3. ^
(按位异或)
例如:
5 ——> 0101
3 ——> 0011
5&3 ——> 0001 ——> 1
5|3 ——> 0111 ——> 7
5^3 ——> 0110 ——> 6
特别说明:
(1)位操作符的操作数必须是整数
(2)位运算都是用补码运算
四、赋值操作符
=
- 复合赋值符
(1)+=
(2)-=
(3)*=
(4)/=
(5)%=
(6)>>=
(7)<<=
(8)&=
(9)^=
(10)|=
五、单目操作符
!
(逻辑反操作)-
(负值)+
(正值)&
(取地址)sizeof
(操作数的类型长度,以字节为单位)
(1)sizeof(变量),其中( )可以省略,说明sizeof不是函数,对于函数来说,它后面的( )不可以省略。
(2)sizeof(类型),其中( )不可以省路,此时sizeof仍不是函数。
(3)sizeof( )内部的表达式不参与计算
例如:int a=10 , b=20; sizeof(b=a+5 );
程序执行完后:a为10,b为20
sizeof(b=a+5)在编译期间就已经运算,根据表达式的类型属性计算可得出4;而变量a和b在链接时才开始创建,b=a+5没有机会去执行,故而a和b不变。
~
(对一个数的二进制按位取反)--
(前置、后置- -)
(1)- -a :a先自减,再使用a
(2)a- - :先使用a,a再自减
++
(前置、后置++)
(1)++a :a先自增,再使用a
(2)a++:先使用a,a再自增
*
(间接访问操作符,解引用操作符)(类型)
(强制类型转换)
六、关系操作符
>
>=
<
<=
!=
(不相等)==
(相等)
七、逻辑操作符
&&
(逻辑与)
a&&b:a和b都为真时,结果为真,否则为假||
(逻辑或)
a||b:a和b都为假时,结果为假,否则为真!
(逻辑反)
八、条件操作符
exp1 ? exp2 : exp3
exp1为真,整个表达式的结果为exp2的结果,否则为exp3的结果。
九、逗号表达式
exp1 , exp2 , exp3 , ...
从左向右依次执行,整个表达式的结果是最后一个表达式的结果,而且前面的运算会影响到最后一个表达式的结果。
十、下标引用、函数调用和结构成员
[]
操作数:一个数组名 + 一个索引值
例如:arr[10],[ ]的操作数是arr和10()
函数调用操作符,接受一个或多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数。- 访问一个结构的成员
(1).
结构体 . 成员名
(2)->
结构体指针 -> 成员名