操作符
分类
- 算术操作符
- 移位操作符
- 位操作符
- 赋值操作符
- 单⽬目操作符
- 关系操作符
- 逻辑操作符
- 条件操作符
- 逗号表达式
下标引⽤用、函数调⽤用和结构成员
算术操作符
+ - * / %
- 除了了%操作符之外,其他的⼏几个操作符可以作⽤用于整数和浮点数。
- 对于/操作符如果两个操作数都为整数,执⾏行行整数除法。⽽而只要有浮点数执⾏行行的就是浮点数 除法。
- %操作符的两个操作数必须为整数。返回的是整除之后的余数。
移位操作符
<< 左移操作符
>> 右移操作符
左移操作符
左边抛弃、右边补0
右移操作符
移位规则
首先右移运算分两种:
1. 逻辑移位
左边用0填充,右边丢弃
2. 算术移位
左边用原该值的符号位填充,右边丢弃
注意:
对于移位运算符,不不要移动负数位,这个是标准未定义的。
位操作符
位操作符有:
& // 按位与
| // 按位或
^ // 按位异或
注:他们的操作数必须是整数
不能创建临时变量量(第三个变量量),实现两个数的交换。
比如这个是错误的。
#include <stdio.h>
int main()
{ int a = 10; i
nt b = 20;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d b = %d\n", a, b);
return 0;
}
赋值操作符
赋值操作符是⼀一个很棒的操作符,他可以让你得到⼀一个你之前不不满意的值。也就是你可以给⾃自⼰己 重新赋值。
符合操作符
+=
-=
*=
/=
%=
>>=
&=
|= =
单目操作符
! 逻辑反操作
- 负值
& 取地址
sizeof 操作数的类型⻓长度(以字节为单位)
~ 对⼀一个数的⼆二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引⽤用操作符)
* (类型) 强制类型转换
sizeof和数组之前说过。
一堆数组输出的时候用sizeof的用法
关系操作符
>
>=
<
<=
!= ⽤用于测试“不不相等”
== ⽤用于测试“相等”
警告
在编程的过程中== 和=不不⼩小⼼心写错,导致的错误。
逻辑操作符
&& 逻辑与
|| 逻辑或
1.&是按位与操作,如果两个相应的二进制位都为1,那该位的结果值就是1,否则为0,即0&0=0,0&1=0,1&1=1,1&0=0。
&&是逻辑与运算符,a&&b,若a、b为真,则a&&b,
1&2—–>0
1&&2—->1
2、|是按位或操,如果两个相应的二进制位中只要有一个为1,则该位结果就是1,即为0|1=1、1|1=1、1|0=1、0|0=0。
||是逻辑或运算符,a||b,若a、b中有一个为真,则a||b结果为真。
1|2—–>3
1||2—->1
条件操作符
exp1 ? exp2 : exp3
表示是否是exp1,如果是 运行exp2,否则运行exp3.
逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,就是⽤用逗号隔开的多个表达式。 逗号表达式,从左向右依次执⾏行行。整个表达式的结果是最后⼀一个表达式的结果。
比如
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);
c=2
下标引用、函数调用和结构成员
1.[ ]
操作数:⼀一个数组名 + ⼀一个索引值
2.( ) 函数调⽤用操作符 接受⼀一个或者多个操作数:第⼀一个操作数是函数名,剩余的操作数就是传递给函数的参数。
3.访问⼀一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名