C#运算符

news2025/5/17 19:04:37

🧠 一、C# 运算符列表(按类别分类)

类别运算符
一元运算符+, -, ++, --, !, ~, (T) x
算术运算符+, -, *, /, %
赋值运算符=, +=, -=, *=, /=, %=, &=, `
比较/关系运算符==, !=, <, >, <=, >=
逻辑/布尔运算符&&, `
按位运算符&, `
条件运算符?:(三元)
空相关运算符??, ??=, ?., ?[]
Lambda 表达式=>
对象创建new
访问运算符., [], (), ->(用于指针)
类型信息typeof, is, as
范围与索引^, ..

✅ 二、详细讲解 + 示例代码

1. 一元运算符(Unary Operators)

int a = 5;
int b = -a;     // 负号
bool flag = true;
Console.WriteLine(!flag);  // false

2. 增减运算符(Increment / Decrement)

int x = 5;
Console.WriteLine(x++);  // 输出 5,之后 x=6
Console.WriteLine(++x);  // 输出 7,先加再输出

3. 强制转换运算符(Cast Operator)

double d = 9.99;
int i = (int)d;  // 显式转换,结果为 9

4. 求反运算符(Logical NOT 和 Bitwise NOT)

bool isTrue = true;
Console.WriteLine(!isTrue);  // false

byte b = 0b1010_1010;
Console.WriteLine(~b);       // 按位取反

5. 赋值运算符(Assignment Operators)

int num = 10;
num += 5;   // 等价于 num = num + 5 → 15

6. 字符串连接运算符(Concatenation)

string greeting = "Hello" + ", World!";

7. 算术运算符(Arithmetic Operators)

int sum = 10 + 5;
int remainder = 10 % 3;  // 余数 1

8. 布尔逻辑运算符(Logical Operators)

bool result1 = true && false;  // false
bool result2 = true || false;  // true

9. 关系运算符(Relational Operators)

int age = 20;
Console.WriteLine(age > 18);  // true

10. 按位运算符(Bitwise Operators)

int x = 5;  // 0b0101
int y = 3;  // 0b0011
int z = x & y;  // 按位与:0b0001 → 1

11. 复合赋值运算符(Compound Assignment)

int total = 100;
total -= 20;  // total = 80

12. new 运算符(创建对象)

List<string> list = new List<string>();
Person p = new Person { Name = "Tom" };

13. 访问运算符(Member Access)

person.Name
array[index]

14. 索引和范围运算符(Index and Range)

string s = "HelloWorld";
char c = s[^1];            // 最后一个字符 'd'
string sub = s[6..^0];     // 从索引6开始到最后:"World"

15. 类型信息(Type Information)

Console.WriteLine(typeof(string));  // System.String
object obj = 123;
if (obj is int) Console.WriteLine("是整数");

16. 运算符优先级(Operator Precedence)

优先级运算符
x.y, f(x), a[i], new, typeof
!, ~, ++x, --x, (T)x
*, /, %
+, -
<<, >>
<, >, <=, >=
==, !=
&
^
`
&&
`
?:
=, op=

✅ 使用括号 () 可以改变优先级顺序。

17. 关联规则(Associativity)

  • 大多数运算符是左结合,如 a + b + c
  • 但赋值运算符是右结合a = b = c 等价于 a = (b = c)
  • 三元运算符也是右结合

18. 空条件运算符(Null-Conditional Operators)

string name = person?.Name;  // 如果 person 为 null,则返回 null
int? length = person?.Name?.Length;

19. 空值合并运算符(Null Coalescing Operator)

string message = null;
string result = message ?? "默认消息";  // 如果 message 为 null,用默认值

20. 空折叠赋值运算符(Null-Coalescing Assignment)

string text = null;
text ??= "初始值";  // text 为 null,所以赋值

21. 三元运算符(Ternary Conditional Operator)

int max = a > b ? a : b;
string result = score >= 60 ? "及格" : "不及格";

22. Lambda 运算符(Lambda Expression)

Func<int, int> square = x => x * x;
list.Where(x => x > 10);

🧮 三、实战练习:计算素数(Prime Numbers)

using System;

class Program
{
    static void Main()
    {
        Console.Write("请输入一个正整数:");
        string input = Console.ReadLine();
        if (int.TryParse(input, out int n) && n > 1)
        {
            bool isPrime = true;
            for (int i = 2; i <= Math.Sqrt(n); i++)
            {
                if (n % i == 0)
                {
                    isPrime = false;
                    break;
                }
            }

            Console.WriteLine($"{n}{(isPrime ? "质数" : "非质数")}");
        }
        else
        {
            Console.WriteLine("输入无效,请输入大于 1 的整数!");
        }
    }
}

🎯 项目名称:C# 运算符综合练习器

功能说明:

这个程序会引导用户输入数据,并演示以下内容:

  • 基本算术、逻辑、关系、位运算
  • 空值处理(??, ?., ??=
  • 三元条件运算符
  • Lambda 表达式
  • 类型转换与类型检查
  • 索引与范围操作
  • 创建对象(new

✅ 完整代码模板(Program.cs)

using System;

class Program
{
    // 自定义类用于测试 new 和访问运算符
    class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public override string ToString()
        {
            return $"Name: {Name}, Age: {Age}";
        }
    }

    static void Main()
    {
        Console.WriteLine("=== C# 运算符综合练习 ===\n");

        // 1. 算术运算符
        int a = 20, b = 7;
        Console.WriteLine($"加法: {a} + {b} = {a + b}");
        Console.WriteLine($"取模: {a} % {b} = {a % b}");

        // 2. 一元运算符
        int c = 5;
        Console.WriteLine($"\n前置自增: ++{c} = {++c}");
        Console.WriteLine($"后置自减: {c}-- = {c--}");

        // 3. 关系运算符
        Console.WriteLine($"\n{a} > {b} ? {a > b}");
        Console.WriteLine($"{a} == {b} ? {a == b}");

        // 4. 逻辑运算符
        bool flag1 = true, flag2 = false;
        Console.WriteLine($"\nflag1 && flag2 ? {flag1 && flag2}");
        Console.WriteLine($"!flag2 ? {!flag2}");

        // 5. 按位运算符
        byte x = 0b1010_1010;
        Console.WriteLine($"\n按位取反 ~x = {Convert.ToString(~x, 2)}");
        Console.WriteLine($"x << 1 = {x << 1}");

        // 6. 三元运算符
        string result = (a > b) ? "a 大于 b" : "a 不大于 b";
        Console.WriteLine($"\n三元判断结果: {result}");

        // 7. 空值相关运算符
        string str1 = null;
        string str2 = "默认文本";
        Console.WriteLine($"\n空合并 ?? : {str1 ?? str2}");
        str1 ??= "首次赋值";
        Console.WriteLine($"空折叠赋值 ??= : {str1}");

        Person person = null;
        Console.WriteLine($"安全访问 ?. : {person?.ToString() ?? "person 为 null"}");

        // 8. 类型信息和强制转换
        object obj = 123;
        if (obj is int)
        {
            int num = (int)obj;
            Console.WriteLine($"\n强制转换 (int)obj → {num}");
        }

        // 9. 范围和索引
        string text = "HelloWorld";
        Console.WriteLine($"\n字符串索引 ^1: {text[^1]}");
        Console.WriteLine($"子串范围 ..^5: {text[..^5]}");

        // 10. Lambda 表达式
        Func<int, int> square = x => x * x;
        Console.WriteLine($"\nLambda 计算平方: square(5) = {square(5)}");

        // 11. new 运算符
        Person p = new Person { Name = "Alice", Age = 25 };
        Console.WriteLine($"\nnew 创建对象: {p}");

        Console.WriteLine("\n按任意键退出...");
        Console.ReadKey();
    }
}

📋 示例运行输出:

=== C# 运算符综合练习 ===

加法: 20 + 7 = 27
取模: 20 % 7 = 6

前置自增: ++5 = 6
后置自减: 6-- = 6

20 > 7 ? True
20 == 7 ? False

flag1 && flag2 ? False
!flag2 ? True

按位取反 ~x = 1111111111111111111111111010101 (取决于平台)
x << 1 = 170

三元判断结果: a 大于 b

空合并 ?? : 默认文本
空折叠赋值 ??= : 首次赋值

安全访问 ?. : person 为 null

强制转换 (int)obj → 123

字符串索引 ^1: d
子串范围 ..^5: Hello

Lambda 计算平方: square(5) = 25

new 创建对象: Name: Alice, Age: 25

按任意键退出...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2377907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

五月份嵌入式面试总结

目录 1、札记 1.1、芯片的bring up 主要做哪些工作&#xff1a; 2、Linux驱动八股文 中断与同步互斥 2.1.1 内核同步互斥的几种方式 2.1.2 互斥锁和自旋锁的区别 2.1.3 spin_lock 和 spin_lock_irqsave 的区别 2.1.4 进程上下文和中断上下文有什么区别 2.1.5 进行上下…

数据库行业竞争加剧,MySQL 9.3.0 企业版开始支持个人下载

最新发现&#xff0c;Oracle 官方网站放开了 MySQL 9.3.0 企业版下载链接&#xff0c;个人用户也可以免费下载&#xff0c;不过只能用于学习、开发或者原型测试&#xff0c;不能用于生产环境。 通常我们都是下载 MySQL 社区版&#xff0c;不过 MySQL 企业版可以支持更多高级功能…

Tcping详细使用教程

Tcping详细使用教程 下载地址 https://download.elifulkerson.com/files/tcping/0.39/在windows环境下安装tcping 在以上的下载地中找到exe可执行文件&#xff0c;其中tcping.exe适用于32位Windows系统&#xff0c;tcping64.exe适用于64位Windows操作系统。 其实tcping是个…

【GAN网络入门系列】一,手写字MINST图片生成

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​&#xff1b;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒…

ubuntu22鼠键失灵恢复记录笔记chatgpt解决

ChatGPT 说&#xff1a; 你提到“Ubuntu 22 鼠键失灵”&#xff0c;这个问题可能涉及以下几方面&#xff1a; &#x1f9ed; 先确认问题 是鼠标问题还是键盘问题&#xff0c;还是触控板&#xff1f; “鼠键”一般理解为“鼠标键”&#xff0c;请确认你是指鼠标左键/右键失灵&a…

智能呼入:云蝠大模型赋能政府热线

政府热线作为连接政府与民众的重要桥梁&#xff0c;提升智能化水平&#xff0c;成为政府热线亟待解决的问题。 大模型呼入 大模型呼入技术基于先进的自然语言处理和机器学习算法&#xff0c;能够实现对海量语音数据的处理和理解。通过构建大规模的语言模型&#xff0c;系统可…

STM32 ADC+DMA+TIM触发采样实战:避坑指南与源码解析

知识点1【TRGO的介绍】 1、TRGO的概述 TRGO&#xff1a;Trigger Output&#xff08;触发输出&#xff09;&#xff0c;是定时器的一种功能。 它可以作为外设的启动信号&#xff0c;比如ADC转换&#xff0c;DAC输出&#xff0c;DMA请求等。 对于ADC来说&#xff0c;可以通过…

(1-4)Java Object类、Final、注解、设计模式、抽象类、接口、内部类

目录 1. Object类 1.1 equals 1.2 toString&#xff08;&#xff09; 2.final关键字 3.注解 4. 设计模式 4.1 单例模式 4.1.1 饿汉式 4.1.3 饿汉式 VS 懒汉式 5. 抽象类&抽象方法 6. 接口 7.内部类 7.1 成员内部类 7.2 静态内部类 7.3 方法内部类 7.4 匿名内…

在服务器上安装AlphaFold2遇到的问题(3)_cat: /usr/include/cudnn_version.h: 没有那个文件或目录

[rootlocalhost ~]# cat /usr/include/cudnn_version.h cat: /usr/include/cudnn_version.h: 没有那个文件或目录这个错误表明系统找不到 cudnn_version.h 头文件&#xff0c;说明 cuDNN 的开发文件&#xff08;头文件&#xff09;没有正确安装。以下是完整的解决方案&#xff…

实验-实现向量点积-RISC-V(计算机组成原理)

目录 一、实验内容 二、实验步骤 三、源代码 四、实现效果 五、实验环境 六、实验小结与思考 一、实验内容 首先&#xff0c;我们用一个简单的“向量点积”运算作为热身。你将拿到一个不完整的汇编代码“task2-向量点积”&#xff0c;我们的目标是按照C语言描述的功能&a…

描述性统计工具 - AxureMost 落葵网

描述性统计工具是用于汇总和分析数据&#xff0c;以更好地了解数据特征的工具1。以下是一些常见的描述性统计工具简介&#xff1a; 描述性统计工具 Excel 基本统计函数&#xff1a;提供了丰富的函数用于计算描述性统计量。例如&#xff0c;AVERAGE 函数用于计算平均值&#xf…

麒麟桌面系统文件保险箱快捷访问指南:让重要文件夹一键直达桌面!

往期文章链接&#xff1a;统信操作系统自定义快捷键配置音量调节功能指南 Hello&#xff0c;大家好啊&#xff0c;今天给大家带来一篇麒麟桌面操作系统上配置文件保险箱内文件夹桌面快捷方式的文章&#xff0c;欢迎大家分享点赞&#xff0c;点个在看和关注吧&#xff01;在日常…

从硬件角度理解“Linux下一切皆文件“,详解用户级缓冲区

目录 前言 一、从硬件角度理解"Linux下一切皆文件" 从理解硬件是种“文件”到其他系统资源的抽象 二、缓冲区 1.缓冲区介绍 2.缓冲区的刷新策略 3.用户级缓冲区 这个用户级缓冲区在哪呢&#xff1f; 解释关于fork再加重定向“>”后数据会打印两份的原因 4.内核缓冲…

游戏站的几种形式

游戏站点的主要形式&#xff1a;单品游戏站、游戏盒子站与单类型游戏盒子站 随着互联网的普及和游戏产业的快速发展&#xff0c;游戏站点作为玩家获取游戏资源和信息的重要平台&#xff0c;呈现出多种形式。本文将分析三种常见的游戏站点形式&#xff1a;单品游戏站、游戏盒子站…

打造智能化军工软件工厂,破解版本管理难题

在数字化浪潮席卷全球的当下&#xff0c;军工行业正经历着前所未有的软件工业化转型。作为这一进程的核心支撑&#xff0c;软件工厂模式正在重塑军工领域的研发体系。然而&#xff0c;传统版本管理方式已难以适应现代军工软件研发的复杂需求&#xff0c;成为制约行业发展的关键…

SpringbBoot nginx代理获取用户真实IP

为了演示多级代理场景&#xff0c;我们分配了以下服务器资源&#xff1a; 10.1.9.98&#xff1a;充当客户端10.0.3.137&#xff1a;一级代理10.0.4.105&#xff1a;二级代理10.0.4.129&#xff1a;三级代理10.0.4.120&#xff1a;服务器端 各级代理配置 以下是各级代理的基本配…

allure报告自定义logo和名称

根据pytest框架&#xff0c;做自动化测试的时候&#xff0c;选择的是allure测试报告&#xff0c;这个报告是目前所有报告中功能最强大最好用的测试报告之一 我们在使用这个测试报告的时候&#xff0c;怎么样去把allure的logo和名称替换成自己公司或者自己的logo呢&#xff1f;…

【AI论文】对抗性后期训练快速文本到音频生成

摘要&#xff1a;文本到音频系统虽然性能不断提高&#xff0c;但在推理时速度很慢&#xff0c;因此对于许多创意应用来说&#xff0c;它们的延迟是不切实际的。 我们提出了对抗相对对比&#xff08;ARC&#xff09;后训练&#xff0c;这是第一个不基于蒸馏的扩散/流模型的对抗加…

测试工程师如何学会Kubernetes(k8s)容器知识

Kubernetes(K8s)作为云原生时代的关键技术之一&#xff0c;对于运维工程师、开发工程师以及测试工程师来说&#xff0c;都是一门需要掌握的重要技术。作为一名软件测试工程师&#xff0c;学习Kubernetes是一个有助于提升自动化测试、容器化测试以及云原生应用测试能力的重要过程…

遥感图像露天矿区检测数据集VOC+YOLO格式1542张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1542 标注数量(xml文件个数)&#xff1a;1542 标注数量(txt文件个数)&#xff1a;1542 …