运算符
优先级 | 运算符 | 含义 | 运算类别 | 结合性 |
1(高) | () | 圆括号,函数参数表 |
| 左结合性 |
[] | 数据元素下标 | |||
-> | 指向结构成员 | |||
. | 结构体成员 | |||
2 | ! | 逻辑非 | 单目运算 | 右结合性 |
~ | 按位取反 | |||
++ | 自增1 | |||
-- | 自减1 | |||
- | 求负 | |||
(类型) | 强制类型转换 | |||
* | 指针运算符 | |||
& | 求地址运算符 | |||
sizeof | 长度运算符 | |||
3 | * | 乘 | 双目运算
| 左结合性
|
/ | 除 | |||
% | 取余 | |||
4 | + | 加 | ||
- | 减 | |||
5 | << | 左移 | 移位运算 | |
>> | 右移 | |||
6 | < | 小于 | ||
<= | 小于等于 | |||
> | 大于 | |||
>= | 大于等于 | 关系运算 | ||
7
| == | 等于 | ||
! | 不等于 | |||
8 | & | 按位与 | 位运算 | |
9 | ^ | 按位异或 | ||
10 | | | 按位或 | ||
11 | && | 逻辑与 | 逻辑运算 | |
12 | || | 逻辑或 | ||
13 | ?: | 条件运算 | 三目运算 | 右结合性 |
14 | = | 赋值 | 双目运算 |
|
+=、-=、*=、/=、%=、>>=、<<=、&=、^=、!= | 复合赋值 |
|
| |
15(低) | , | 逗号运算(顺序求值) | 顺序运算 | 自左到右 |
基本运算符
+(加法)、-(减法/取负)、*(乘法)、/(除法)、%(取余)
前四种适合所有的数据类型,%只用于整型、字符型运算量
与代数运算不同点
除法运算(/):两个整数相除的结果是整数,如果商含有小数部分被舍弃,如果两个运算对象中有一个是实数,则商是实数。
取余运算(%):计算两个整数相除的余数,要求运算符两侧的操作数均为整型
自增,自减 运算对象必须是变量,不能是常量或表达式,作用是使变量的值加/减1
语法
前置运算 ++(--)变量 先增(减),后运算
后置运算 变量 ++(--) 先运算,后加(减)
算数表达式 用算术运算符和括号将运算对象(常量、变量、函数等)连接起来,并且符合C语法规则的语句,单个变量、常量或函数都可以看作是表达式
书写规则
算术表达式的所有字符都写在同一条线上,没有上/下标之分
严格遵守C语言规则,运算符不能随意省略或替换
算数表达式应能正确的表达数学公式
求值规则
按运算的优先级高低次序执行
如果一个运算对象两侧的运算符的优先级相同,则按其结合性进行运算
关系运算符
关系运算就是比较运算,能反映两个表达式之间的大小关系,关系运算的结果(非“真”即“假”)是一个逻辑值
注:C语言中,“等于”关系运算符是“==”,而不是“=”(赋值运算符)
优先级规则
<、<=、>、>=的优先级高于==、!=
关系运算符的优先级高于赋值运算符,但是低于算术运算符
优先级由高到低:算术运算符>(<、<=、>、>=)>(==、!=) >赋值运算符
关系表达式
用关系运算符和括号将两个表达式(算术表达式、逻辑表达式、赋值表达式或字符表达式等)连接起来,进行关系运算的式子
使用说明
组成运算符的两个字符之间不可加空格
注意关系运算符“==”与赋值运算符“=”之间的区别
逻辑运算符
优先级 !>&&>||
逻辑表达式
用逻辑运算符将一个或多个表达式连接起来,进行逻辑运算的式子,在C中,用逻辑表达式表示多个条件的组合
说明
逻辑运算符的操作对象,不仅是0还可以是非0的其他整数,也可以是其他类型的数据
&&、||运算符具有短路急速那特性。即若“&&”的第一个操作数为假时,第二个操作数则不在进行求值,同理,若“||”的第一个操作数为真时,第二个操作数也不再进行求值。所以,在逻辑表达式中的计算并不是所有的运算对象都被求值
赋值运算符
复合赋值运算 格式 变量 双目运算符 = 表达式(等价于 变量 =变量 双目运算符(表达式))
赋值表达式
条件运算符与条件表达式(?: 三目运算)
语法 表达式1?表达式2:表达式3(当表达式1为真时,取表达式2的值,否则取表达式3的值,通常表达式1为关系表达式或逻辑表达式)
使用说明
条件运算符的优先级低于关系运算符和算术运算符,但高于赋值运算符
条件运算符“?”和“:”是一对运算符,不能分开单独使用
条件运算符的结合方向是自右向左
位运算
位逻辑运算
操作数必须是整型或字符型
操作符 | 名称 | 运算规则 | 主要用途 |
& | 按位与 | 同1为1 | 将一个数的某(些)位置0,其余位保持不变 |
| | 按位或 | 同0为0 | 将一个数的某(些)位置1,其余位保持不变 |
^ | 按位异或 | 相同为0,相异为1 | 将一个数的某(些)位翻转,其余位保持不变 |
~ | 按位取反 | 翻转,即0变1,1变0 | 间接构造一个数。以增强程序的可移植性 |
运算时,首先将操作数转换成二进制数(补码),然后再按位进行运算
按位取反运算符优先级别与其他单目运算符相同,运算自右向左运算;双目&运算符优先级高于|运算符,|运算符高于^运算符
位双目运算符优先级低于关系运算符,高于逻辑运算符,运算自左到右进行
位移运算
操作符 | 名称 | 运算规则 | 说明 |
<< | 左移 | a<<b,a左移b位 | 使操作数各位左移,低位补0,高位移除舍去 |
>>
| 右移 | a>>b,a右移b位 | 使操作数各位右移,低位移除舍去,对于高位 对无符号数和有符号数中的正数,补0 有符号数中的负数取决于所使用的系统;补0的称为“逻辑右移”,补1的称为“算数右移” |
位运算赋值运算符
操作符 | 名称 | 运算规则 | 说明 |
&= | 位与赋值 | a&=b 等价于 a=a&b | 操作数均为整数 |
|= | 位或赋值 | a|=b 等价于 a=a|b | |
^= | 按位异或赋值 | a^=b 等价于 a=a^b | |
<<= | 位左移赋值 | a<<=b 等价于 a=a<<b | |
>>= | 位右移赋值 | a>>=b 等价于 a=a>>b |
下节链接https://blog.csdn.net/chaolingw/article/details/79830141