1、C语言的运算符
C语言的运算符大致有13个分类 ,每个分类下面包含一到多个运算符,不必死记硬背,C 语言运算符分类表可放在手边,随时查阅,熟能生巧,自然就记住了。
编号 | 名称 | 内容 |
1 | 算术运算符 | +、-、*、/、% |
2 | 关系运算符 | >、<、==、>=、<=、!= |
3 | 逻辑运算符 | !、&&、|| |
4 | 位运算符 | <<、>>、~、|、^、& |
5 | 赋值运算符 | = 以及多个重合赋值运算符 |
6 | 条件运算符 | ?: |
7 | 逗号运算符 | , |
8 | 指针运算符 | *、& |
9 | 求占字节运算符 | sizeof() |
10 | 强制类型转换运算符 | (类型名) |
11 | 成员变量运算符 | .、-> |
12 | 下标运算符 | [] |
13 | 其他 | ...... |
2、算术运算符和算术表达式
基本的算术运算符如下:
(1)+,加,如 1+2
(2)- ,减,如 3-2
(3)*,乘,如2*3
(4)/,除,如 5/3 ,这里是两个整数相除,结果会舍弃小数部分
(5)% ,取余 ,也叫模运算符,运算符的两侧都要求为整型数 ,5%3=2
例:
3、运算符优先级问题
1)运算符优先级规则是先乘除,后加减,如果优先级相同,一般先算左边,后算右边(不同运算符,也有可能先算右边,后算左边)
2)忘记运算优先级时,可先用()括起来。
不同种类运算符在混合运算时也会存在优先级问题,下面表中不同运算符的优先级,数字越小越高
例: a=1+2 ;
赋值运算符=号 小于 算术运算符+号,所以是先算1+2的结果,再赋值给a。
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | ----- |
() | 圆括号 | (表达式)/函数名(形参表) | ----- | ||
. | 成员选择(对象) | 对象.成员名 | ----- | ||
-> | 成员选择(指针) | 对象指针->成员名 | ----- | ||
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
(类型) | 强制类型转换 | (数据类型)表达式 | ----- | ||
++ | 前置自增运算符 | ++变量名 | 单目运算符 | ||
++ | 后置自增运算符 | 变量名++ | 单目运算符 | ||
-- | 前置自减运算符 | --变量名 | 单目运算符 | ||
-- | 后置自减运算符 | 变量名-- | 单目运算符 | ||
* | 取值运算符 | *指针变量 | 单目运算符 | ||
& | 取地址运算符 | &变量名 | 单目运算符 | ||
! | 逻辑非运算符 | !表达式 | 单目运算符 | ||
~ | 按位取反运算符 | ~表达式 | 单目运算符 | ||
sizeof | 长度运算符 | sizeof(表达式) | ----- | ||
3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 |
* | 乘 | 表达式*表达式 | 双目运算符 | ||
% | 余数(取模) | 整型表达式/整型表达式 | 双目运算符 | ||
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | 双目运算符 | ||
5 | << | 左移 | 变量 | 左到右 | 双目运算符 |
>> | 右移 | 变量>>表达式 | 双目运算符 | ||
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | 双目运算符 | ||
< | 小于 | 表达式 | 双目运算符 | ||
<= | 小于等于 | 表达式 | 双目运算符 | ||
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!= 表达式 | 双目运算符 | ||
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 | ----- |
/= | 除后赋值 | 变量/=表达式 | ----- | ||
*= | 乘后赋值 | 变量*=表达式 | ----- | ||
%= | 取模后赋值 | 变量%=表达式 | ----- | ||
+= | 加后赋值 | 变量+=表达式 | ----- | ||
-= | 减后赋值 | 变量-=表达式 | ----- | ||
<<= | 左移后赋值 | 变量 | ----- | ||
>>= | 右移后赋值 | 变量>>=表达式 | ----- | ||
&= | 按位与后赋值 | 变量&=表达式 | ----- | ||
^= | 按位异或后赋值 | 变量^=表达式 | ----- | ||
|= | 按位或后赋值 | 变量|=表达式 | ----- | ||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | 从左向右顺序运算 |
上表中的运算符大都没有学过,在这里只需要了解优先级的概念即可。
一般找工作时面试题中可能会考优先级的记忆,例如:
计算:a += a*= a/=a-6;
先算a/=a-6,等于a=a/(a-6),a=2;
再算a*=2,等于a=a*2,a=4;
最后算a+=4,等于a=a+4,a=8;
运算符的优先级不用刻意去记,实际应用的时候可以查表,用多了就熟悉了。