运算符
有几个操作数 就是 几元运算符
1、算术运算符
*运算符* | *描述* | *操作数个数 (几元运算符)* | *组成的表达式的值* | *副作用* | |
---|---|---|---|---|---|
+ | 正号 | 1 | 操作数本身 | 无 | |
- | 负号 | 1 | 操作数符号取反 | 无 | |
+ | 加号 | 2 | 两个操作数之和 | 无 | |
- | 减号 | 2 | 两个操作数之差 | 无 | |
***** | 乘号 | 2 | 两个操作数之积 | 无 | |
/ | 除号 | 2 | 两个操作数之商 | 无 | |
% | 取模(取余) | 2 | 两个操作数相除的余数 | 无 | |
++ | 自增 | 1 | (运算符在后)操作数自增前或(运算符在前)自增后的值 | 有 | 运算符所在位置对 操作数的副作用相同(都自增) |
-- | 自减 | 1 | (运算符在后)操作数自减前或(运算符在前)自减后的值 | 有 | 运算符所在位置对 操作数的副作用相同(都自减) |
注:一、对于 取余%
1.表达式值得符号(正负)与第一个操作数(被除数)一致
2.取余运算符的操作数必须是整数
二、有副作用的运算符要求:操作数必须是变量的形式!!
2、关系运算符(比较运算符)
注:比较时,有符号转无符号之后再进行比较
*运算符* | *描述* | *操作数个数(几元运算符)* | *表达式的值(int类型)* | *副作用* |
---|---|---|---|---|
== | 相等 | 2 | 0 或 1 | 无 |
!= | 不等 | 2 | 0 或 1 | 无 |
< | 小于 | 2 | 0 或 1 | 无 |
> | 大于 | 2 | 0 或 1 | 无 |
<= | 小于等于 | 2 | 0 或 1 | 无 |
>= | 大于等于 | 2 | 0 或 1 | 无 |
3、逻辑运算符
*运算符* | *描述* | *操作数个数* | *表达式的值* | *副作用* |
---|---|---|---|---|
&& | 逻辑与 | 2 | 0 或 1 | 无 |
|| | 逻辑或 | 2 | 0 或 1 | 无 |
! | 逻辑非 | 1 | 0 或 1 | 无 |
4、位运算符 (指的是二进制位)
*运算符* | *描述* | *操作数个数* | *副作用* |
---|---|---|---|
& | 按位与 | 2 | 无 |
| | 按位或 | 2 | 无 |
^ | 按位异或 | 2 | 无 |
~ | 按位取反 | 1 | 无 |
<< | 按位左移 | 2 | 无 |
>> | 按位右移 | 2 | 无 |
5、赋值运算符
1、左边操作数必须是变量的形式,右边操作数可以是变量、常量、表达式
2、从右向左赋值
*运算符* | *描述* | *操作数个数* | *表达式的值* | *(对左边操作数)副作用* |
---|---|---|---|---|
= | 赋值 | 2 | 左边操作数的值 | 有 |
+= | 相加赋值 | 2 | 左边操作数的值 | 有 |
-= | 相减赋值 | 2 | 左边操作数的值 | 有 |
*= | 相乘赋值 | 2 | 左边操作数的值 | 有 |
/= | 相除赋值 | 2 | 左边操作数的值 | 有 |
%= | 取余赋值 | 2 | 左边操作数的值 | 有 |
<<= | 左移赋值 | 2 | 左边操作数的值 | 有 |
>>= | 右移赋值 | 2 | 左边操作数的值 | 有 |
&= | 按位与赋值 | 2 | 左边操作数的值 | 有 |
^= | 按位异或赋值 | 2 | 左边操作数的值 | 有 |
|= | 按位或赋值 | 2 | 左边操作数的值 | 有 |
6、三元运算符
条件表达式? 表达式1: 表达式2;
表达式取值规则:
① a 成立,b 作为整个表达式的值
② a 不成立,c 作为整个表达式的值
7.其余运算符
, 二元运算符,表达式的值是第二个操作数的值
sizeof
&
* ——取值运算符
. ——成员选择(对象)
-> ——成员选择(指针)
注:添加 () 提高优先级!
二、运算符优先级
(1)不要过多的依赖运算的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用小括号来控制表达式的执行顺序。
(2)不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成。
(3)运算符优先级不用刻意地去记忆,总体上:一元运算符 > 算术运算符 > 关系运算符 > 逻辑运算符 > 三元运算符 > 赋值运算符。
*优先级* | *运算符* | *名称或含义* | *结合方向* |
---|---|---|---|
*1* | [] | 数组下标 | 左到右 |
() | 圆括号 | ||
. | 成员选择(对象) | ||
-> | 成员选择(指针) | ||
*2* | - | 负号运算符 | 右到左 |
(类型) | 强制类型转换 | ||
++ | 自增运算符 | ||
-- | 自减运算符 | ||
* | 取值运算符 | ||
& | 取地址运算符 | ||
! | 逻辑非运算符 | ||
~ | 按位取反运算符 | ||
sizeof | 长度运算符 | ||
*3* | / | 除 | 左到右 |
* | 乘 | ||
% | 余数(取模) | ||
*4* | + | 加 | 左到右 |
- | 减 | ||
*5* | << | 左移 | 左到右 |
>> | 右移 | ||
*6* | > | 大于 | 左到右 |
>= | 大于等于 | ||
< | 小于 | ||
<= | 小于等于 | ||
*7* | == | 等于 | 左到右 |
!= | 不等于 | ||
*8* | & | 按位与 | 左到右 |
*9* | ^ | 按位异或 | 左到右 |
*10* | | | 按位或 | 左到右 |
*11* | && | 逻辑与 | 左到右 |
*12* | || | 逻辑或 | 左到右 |
*13* | ?: | 条件运算符 | 右到左 |
*14* | = | 赋值运算符 | 右到左 |
/= | 除后赋值 | ||
*= | 乘后赋值 | ||
%= | 取模后赋值 | ||
+= | 加后赋值 | ||
-= | 减后赋值 | ||
<<= | 左移后赋值 | ||
>>= | 右移后赋值 | ||
&= | 按位与后赋值 | ||
^= | 按位异或后赋值 | ||
|= | 按位或后赋值 | ||
*15* | , | 逗号运算符 | 左到右 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)