C语言操作符大致分为:算术操作符、移位操作符、位操作符、赋值操作符、单目运算符、逻辑操作符、条件操作符、逗号操作符、
下标引用、函数调用和结构成员。
。算术操作符:+ - * / % 这些操作符都很常见,也不用特别的说明。但是有一点:除%外,其他几个操作符可以作用于浮点数和整数。
移位操作符:<< 左移 >>右移 举个例子:00000000 ...00000010<< 00000000...00000100 左移
00000000...00000010>> 00000000...00000001 右移
右移:1.算数移位(右边丢弃,左边补符号位)
2.逻辑移位(右边丢弃,左边补0)
位操作符:&、|、^
假设A的值是6,B的值是11。
位操作符 | 描述 | 实例 |
& | 按位与 | A&B得到2,即 0010(简写) |
| | 按位或 | A|B得到15,即 1111(简写) |
^ | 按位异或 | A^B得到13,即 1101(简写) |
注:他们的操作数必须是整数。
赋值操作符:
赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。其中包括复合操作符。
赋值操作符 | 描述 | 实例 |
= | 简单的赋值运算符,把右边操作数的值赋给左边 | C=A+B将A+B的值 赋给C |
+= | 加且赋值运算符 | C+=A相当于C=C+A |
-= | 减且赋值运算符 | C-=A相当于C=C-A |
*= | 乘且赋值运算符 | C*=A相当于C=C*A |
/= | 除且赋值运算符 | C/=A相当于C=C/A |
%= | 求模且赋值运算符 | C%=A相当于C=C%A |
<<= | 左移且赋值运算符 | C<<=1相当于C=C<<1 |
>>= | 右移且赋值运算符 | C>>=1相当于C=C>>1 |
&= | 按位与且赋值运算符 | C&=1相当于C=C&1 |
^= | 按位异或且赋值运算符 | C^=A相当于C=C^1 |
|= | 按位或且赋值运算符 | C|=A相当于C=C|1 |
比如:
(5)单目操作符:
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
假如a的值是1。
单目操作符 | 描述 | 实例 |
! | 逻辑反操作,用来逆转操作数逻辑状态 | !a为假 |
& | 返回变量的地址 | &a;给出变量实际地址 |
sizeof() | 操作数的类型长度 返回变量的大小 | sizeof(a)将返回4,其中a是整数 |
~ | 对一个数的二进制按位取反 | ~a的值是0 |
* | 间接访问操作符 指向一个变量 | *a;将指向一个变量 |
++ | 自增运算符 | a++得到2 |
-- | 自减运算符 | a--得到0 |
++ 前置、后置++区别:
++i(在使用i之前,先使i的值加1)
i++(在使用i之后,再使i的值加1)
注意:
1、sizeof()不是函数,在求变量大小时可去掉括号,但求类型大小时一定要加括号。
2、放在在sizeof()内部表达式不参与运算。
3、数组名单独放在sizeof()内部,数组名表示整个数组。
4、&数组名—数组名表示整个数组。
5、指针++取决于指针的类型。
关系操作符:
>
>=
<<=
!= 用于测试“不相等”
== 用于测试“相等”
注意一些运算符使用时候的陷陷。比如:
x = get_value();
if(x = 5)
我们将判断的 == 搞成了赋值的 = ,这样的话无论x是多少都会被执行,所以切记不要写错了。
逻辑操作符:
&& 逻辑与
|| 逻辑或
区分逻辑与和按位与,逻辑或和按位或:
1&2----->0
1&&2---->1
1|2----->3
1||2---->1
条件操作符:
exp1 ? exp2 : exp3
如果条件为真则看exp2 ;如果条件为假,则看exp3
逗号表达式:
exp1, exp2, exp3, …expN
注意:
1、逗号表达式,就是用逗号隔开的多个表达式。
2、逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
下标引用、函数调用和结构成员:
1. [ ]下标引用
操作数:一个数组名 + 一个索引值
[ ]的两个操作数是arr和9。
2. ()函数调用操作符
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
3. 访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名