目录
算数操作符:
+ - * / %
%代表一个数除另一个数后的余数,比如3 % 1 = 0,1 % 3 = 1
除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
% 操作符的两个操作数必须为整数。返回的是整除之后的余数。
移位操作符:
<< 左移操作符
移位规则:
左边抛弃、右边补0
>> 右移操作符
逻辑移位 左边用0填充,右边丢弃
算术移位 左边用原该值的符号位填充,右边丢弃
编译器的不同决定了在使用>>操作符采用了哪种移位方式,正数的符号位是0,负数是1。
移位操作符的操作数只能是正整数。
位操作符:
& 按位与 对于两个数的每个二进制位,都是1的时候就是1,其他时候为0
| 按位或 对于两个数的每个二进制位,有一个是1就是1,
^ 按位异或 对于两个数的每个二进制位,相异为1,相同为0
他们的操作数必须是整数。
我们可以通过异或操作,实现两个数的交换
#include <stdio.h>
int main() {
int a = 10;
int b = 20;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d b = %d\n", a, b);
return 0;
}
复合操作符:
+= -= *= /= %= >>= <<= &= |= ^=
例如 x += 10 就相当于 x = x + 10 x ^= 1 相当于 x = x ^ 1
单目操作符:
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位) ~ 对一个数的二进制按位取反
-- 前置、后置-- (前置就是先++再使用,后置是先使用再++)
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
关系操作符:
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
需要注意的是,当我们判断浮点数是否等于0时,需要使用下列方法
if(y > -0.0001 && y < 0.0001)
逻辑操作符:
&& 逻辑与 两个代码如果都是真,那么整体为真,否则为假
|| 逻辑或。 两个代码如果有一个是真那么整体就是真
条件操作符:
exp1 ? exp2 : exp3 当exp1为真时执行exp2,否则执行exp3
例如 3 > 5 ? x = 3 : 5,这个时候x = 5
逗号表达式:
exp1,exp2,exp3... 从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1); 最终c = 13
下标引用、函数调用和结构成员:
[ ] 下标引用操作符
操作数:一个数组名 + 一个索引值
arr[i + 3]就相当于*(arr + 3)
( ) 函数调用操作符
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名
注意事项:
各个操作符的优先顺序不同,在使用前,应该先上网查明操作符的优先性与结合性,并且尽量避免多个复杂操作符的使用,在不同的编译器下可能产生不同的结果。