运算符
优先级 |
运算符 |
含义 |
运算类别 |
结合性 |
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