C#中38个常用运算符的优先级的划分和理解。

本文总结了C#中的38个常用运算符,并按其特点和优先级分为七个等级,便于记忆。从单元运算符到后缀单元运算符,详细介绍了每个等级中的运算符及其在编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C#中,一共有38个常用的运用符,根据它们所执行运算的特点和它们的优先级,为了便于记忆,我将它们归为七个等级:1、单元运算符和括号。2、常规算术运算符。3、位移运算符。4、比较运算符。5、逻辑运算符。6、各种赋值运算符。7、右位(后缀)单元运算符。

1、在这一级中,有++、--(做为前缀)、()、+、-(做为单元运算符)、!、~。这一级中都是单元运算符,除了其中那一对特殊的具有改变任何运算优先级的括号。这此可以看出,在定义表达式中,那些单元运算符的优先级是很高的,可能是因为它们都直接作用于操作数吧。只有两个单元运算符的优先级不在第一级中,它们因为特殊的原因出现在了后面。
2、在常规算术运算符中,有我们经常使用的*、/、%、+、-,因为他们使用得较多,所以也排在较高的位置。
3、这一级是两个特殊的位操作符,<< 和 >>,它们是所有二元操作符中除常规运算符外优先级最高的了,可能是因为与比较运算符、逻辑运算符比起来,这一组操作符进行的还是数值的计算。
4、比较运算符,包括<、>、<=、>=、==、!=,一共六个,这里有一个特点,就小于优先于大于。
5、逻辑运算符,逻辑运算符原本有四种,但用于单元的“非”运算符排在了前面,所以这里面就只有&、^、|,再加上两个补充的用于提高代码效率的运算符&&、||,共有五个。
6、赋值运算符,这一级最多,几乎前面出现过的二元运算符,在这里加上个“=”号就成为一个赋值运算符。首先当然最基本的赋值运算符“=”;然后是常规算术运算符演变来的“*=、/=、%=、+=、-=”,它们的顺序和常规算术符的顺序一样;然后是位移运算符和逻辑运算符,也按它们演变前的顺序排列,为“<<=、>>=、&=、^=、|=”。因为比较运算符所产生的结果的数据类型和它的运算数的数据类型不同,所以它们没有相应的赋值运算符。
7、最后一级,就是那两个最后的单元运算符后缀版的++、--。它们的出现就是为了做为那两个前缀版的==、--的补充(那两个的优先级太高了,人们需要两个优先级不那么高的),以方便设计表达式,所以这两个的优先级当然要排在最后了。

那么,这38个操作符的优先级顺序就可以写成如下了:(无论是横向还是竖向,越靠前优先级越高)
第一级:++、--(做为前缀)、()、+、-(做为单元运算符时)、!、~。
第二级:*、/、%、+、-。
第三级:<<、>>。
第四级:<、>、<=、>=、==、!=。
第五级:&、^、|、&&、||。
第六级:=、*=、/=、%=、+=、-=、<<=、>>=、&=、^=、|=。
第七级:++、--(做为后缀)。

这只我自己在学C#中的一些总结,其中对于各级的划分方式、各操作符的优先级的理解并不见得正确,只是自己的看法,拿出来与大家分享。

1. 目标 计算器的实现目标是创建一个能够进行数学运算的程序,其主要目标包 括: 1. 支持基本数学运算:实现加法、减法、乘法除法等基本算术运算。 2. 处理运算符优先级:正确处理不同运算符优先级,确保表达式按照 数学规则进行计算。 3. 支持括号:能够处理带有括号的表达式,按照括号的优先级进行计算。 4. 处理多位数小数:能够正确处理多位数带小数点的数值,并进行 准确的运算。 5. 错误处理:能够检测并处理用户输入错误的情况,如非法字符、不完 整的表达式等,并给出相应的错误提示。 6. 提供用户界面:创建一个用户友好的界面,使用户能够输入表达式并 查看计算结果。 7. 可扩展性可维护性:使用模块化的设计合适的数据结构,使得代 码易于扩展维护,可以方便地添加新的运算符或功能。 8. 良好的性能效率:在处理大型表达式时,能够保持较高的计算性能 效率,以便快速计算结果。 通过实现这些目标,计算器能够提供准确、可靠且易于使用的数学运算 功能,满足用户的计算需求,并能够适应不同的计算场景。 2. 模块划分 将计算器实现分解为多个模块可以提高代码的可维护性可扩展性。以 下是一个可能的模块划分: 1. 用户界面模块: - 负责与用户进行交互,接收用户输入的数学表达式。 - 可以是一个命令行界面或图形用户界面(GUI)。 2. 表达式解析模块: - 将用户输入的数学表达式解析为中缀表达式。 - 可以实现中缀表达式的构建验证。 3. 中缀转后缀模块: - 将中缀表达式转换为后缀表达式。 - 包括处理运算符优先级括号匹配的逻辑。 4. 后缀表达式求值模块: - 根据后缀表达式计算表达式的值。 - 可以实现栈的操作不同运算符的计算逻辑。 3 5. 错误处理模块: - 处理用户输入错误或计算过程中的错误情况。 - 包括错误提示异常处理。 6. 输出模块: - 将计算结果输出给用户。 - 可以在用户界面模块中处理输出逻辑。 通过将计算器的功能划分为不同的模块,可以使代码更加清晰、模块化, 并且容易进行单元测试扩展。每个模块都可以有自己的接口实现,使得 团队成员可以独立地开发维护各个模块。 3. 模块功能实现 3.1 表达式解析模块 要在 C 语言中实现计算器的表达式解析模块,可以按照以下步骤进行: 1. 定义所需的数据结构: - 创建一个结构体来表示表达式的每个元素,包括操作数运算符。 - 可以使用链表或数组来存储表达式的元素。 2. 实现表达式解析函数: - 创建一个函数,接受表达式字符串作为输入,并返回解析后的表达式 数据结构。 - 遍历表达式字符串的每个字符: - 判断当前字符是数字还是运算符。 - 如果是数字,解析连续的字符,构造操作数,并将其添加到表达式 数据结构中。 - 如果是运算符,将其添加到表达式数据结构中。 - 返回解析后的表达式数据结构。c语言
06-05
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值