C#教程(6)———— 比较运算符与逻辑运算符

2023-11-12

前言

在之前的文章中,我们介绍了各种数学运算该怎么进行,而在数学中我们也常常会遇到比较大小的情况,比如期末考试考到80分以上就可以吃肯德基,那么今天我们就来探讨一下,计算机中如何比较两个数值的大小。

1 比较运算符

比较运算符也叫关系运算符,用于比较两个值的大小,并返回一个布尔值,表示是否满足某一个条件,在生活中我们常常有类似的数值比较,比如考试考到80分以上就可以去吃肯德基,那么我们就需要用考试成绩和80分作比较,来判断是否可以吃肯德基。

下面我列举了C#中所有的比较运算符,其中例子中的A = 5, B = 10。

运算符 描述 例子
== 检查左右两侧操作数是否相等,相等为true,不等为false A == B 返回结果为false
!= 检查左右两侧操作数是否不等,相等为false,不等为true A != B 返回结果为true
> 检查左侧操作数是否大于右侧操作数,大于为true,小于为false,相等为false A > B 返回结果为false
< 检查左侧操作数是否小于右侧操作数,大于为false,小于为true,相等为false A < B 返回结果为true
>= 检查左侧操作数是否大于等于右侧操作数,大于为true,小于为false,相等为true A >= B 返回结果为false
<= 检查左侧操作数是否小于等于右侧操作数,大于为false,小于为true,相等为true A <= B 返回结果为true

注意:之前的文章中提到过,浮点数类型float和double两种数据类型是不准确的,因此这两种数据类型一般不会被放在 == 左右进行比较,一般只会进行大于或小于比较。

1.1 不同数据类型之间比较

不同的数据类型也可以同时放在比较运算符左右进行比较,如:

int value1 = 10;
float value2 = 10.5f;
Console.WriteLine(value1 < value2);//输出结果为true

1.2 使用比较运算符比较字符类型

比较运算符也不仅仅可以用来比较数字,在C#中,字符类型也可以作为比较运算符左右的操作数,但和之前的算术运算符一样,字符类型在做比较时比较的也是它的编码表中对应的编码,而不是字符本身,如大写字母‘A’的十进制ASCII码为65,小写字母‘a’的十进制ASCII码为97,那么有如下代码:

char charValue1 = 'A';
char charValue2 = 'B';
Console.WriteLine(charValue1 > charValue2);//输出结果为false

同时,字符类型也可以和数值类型进行比较。

int intValue = 65;
char charValue = 'A';
Console.WriteLine(intValue == charValue);//输出结果为True

1.3 其它数据类型比较

在上文中我们展示了数值类型和字符类型在运用于比较运算符时的效果,那么到目前为止我们提到过的数据类型中,还有布尔类型和字符串类型没有被提及,那么比较运算符可以应用于这两种数据类型么?

Console.WriteLine("a" >= "bc");//报错
Console.WriteLine("a" == "a");//输出结果为True
Console.WriteLine(true != false);//输出结果为False
Console.WriteLine(true < false);//报错

在C#中,比较运算符可以应用于字符串类型和布尔类型之间,但只有“==、!=”两个运算符可用,无法判断大小。

2 逻辑运算符

逻辑运算符只能使用在不两个布尔类型之间,当一个判断需要有多个条件时使用。

逻辑运算符主要有三个,分别为:

  • 逻辑与(&&):左右两个条件都为true时返回true,有一个false就返回false;
  • 逻辑或(||):左右两个条件有一个为true时就返回true,两个都是false时返回false
  • 逻辑非(!):取反运算

或者我们换一个例子来形容,比如找工作时,招聘启事中常见的两个条件,一个是要求有三年工作经验,另一个是要求本科以上学历。

那么什么是逻辑与呢,就是要求既要有三年工作经验,又要是本科以上学历,有一个条件没达成,就算不满足条件。

什么是逻辑或呢,就是这个公司要求比较低,有三年工作经验或者本科以上学历就行,两个条件只要达成一个就满足条件,要都不满足就不行了。

而逻辑非比较特殊,他只有一个操作数,作用是将true变为false,把false变为true。

Console.WriteLine(!true);//输出结果为false
Console.WriteLine(!false);//输出结果为true

在C#中,由于其他数据类型不能转换为布尔类型,所以逻辑运算符只能应用于布尔类型之间,不能应用于其它任何类型。

短路规则

短路规则是程序在执行时,为了降低运算次数而产生的一个规则, 规则如下:

  • 在逻辑与运算中,如果第一个条件为false则不再判断第二个条件
  • 在逻辑或运算中,如果第一个条件为true则不再判断第二个条件

其实这两个规则也很好理解,还是刚才找工作的例子,在第一家比较严格的公司,当我发现你没有三年以上工作经验时,你是不是本科毕业的对我就没有什么意义了,因为你已经不再满足条件了。

那么对于第二家公司来说,如果你有三年以上工作经验,我就不需要再考虑你是否是本科毕业的了,因为两个条件有一个满足,你就已经满足了条件了。

这个规则在遇到逻辑运算中出现运算时需要格外注意,如:

int num = 1;
Console.WriteLine(1 > 2 && num++ == 2);//输出结果为false
Console.WriteLine(num);//输出结果为1
Console.WriteLine(1 < 2 || num++ < 2);//输出结果为true
Console.WriteLine(num);//输出结果为1

在上面的代码中,如果正常进行,因为num++这个自增操作,在第一次输出false后num值应该变为2,但实际上并没有发生改变,就是因为短路规则,使得第二个语句并没有被执行,因此num值没变,下面的代码也是同理。

总结

以上就是今天要介绍的内容,今天的主要内容为介绍所有的比较运算符和逻辑运算符,这两种运算符会在后续程序中大量的使用,在程序中会有非常多的执行条件,就比如最开始说的80分以上才能吃肯德基,在程序中也会有很多类似于这样的条件,只有当满足一定条件才能执行特定的代码,当然这里也需要后续学习的分支语句来配合使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#教程(6)———— 比较运算符与逻辑运算符 的相关文章

  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • 创建M32F103C8T6的工程文件之后编译为什么一堆错误?

    首先先看错误的提示是不是以下的显示 Rebuild started Project STM32F103C8T6 Using Compiler V6 15 folder F keil ARM ARMCLANG Bin Rebuild targ
  • 关于vxe-table全局引入的问题

    主要讲解一下vxe table全局引入然后使用碰到的问题 0 vxe table的官网地址 1 基本环境 1 vue版本为3 x以上 我的是3 2 13 2 依赖库 xe utils 注意 这篇博客的是vue3的脚手架搭建的 如果需要看低版
  • 毕业设计-机器视觉的疲劳驾驶检测系统-python-opencv

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度
  • vue-admin-template,连接自己后台,二次开发必看

    第一步 找到 env development文件做如下修改 just a flag ENV development base api VUE APP BASE API api 第二步 找到 vue config js 配置跨域 关闭mock
  • Ubuntu 20版本将动态ip修改为静态ip时,ping 不通网络

    问题描述 在对Ubuntu 20版本将动态ip修改为静态ip时 ping www baidu com ping不通了 火狐浏览器没有了网路 下载不了东西 一直卡在这里不动 问题出在哪里还是配置ip dns 网关的问题 如果我们在当初安装ub
  • Spring:从零开始的Cloud生活(零)——Eureka 服务治理

    目录 Spring 从零开始的Cloud生活 零 Eureka 服务治理 1 Netfilx Eurake 2 搭建服务注册中心 3 服务提供者 4 高可用注册中心 5 服务发现和消费 之前对于SpringCloud都是一知半解的状态 现在
  • MySQL中的模糊查询

    1 表示任意0个或多个字符 可匹配任意类型和长度的字符 有些情况下若是中文 请使用两个百分号 表示 比如 SELECT FROM user WHERE u name LIKE 三 将会把u name为 张三 张猫三 三脚猫 唐三藏 等等有
  • python调用turtle(海龟画图),画一个正方形

    调用海龟画图 画一个正方形 方法一 调用海龟画图 import turtle bob turtle Turtle print bob 定义画图的方向 此处画了一个直角 bob fd 100 bob lt 90 加入以下步骤画了一个正方形 b
  • Linux Shell学习简单小结(更新中……)

    if fi bin bash 删除文件 和 新建文件 file readme function delFile if e file then rm f file echo del file fi function addFile if f
  • YOLO系列发展史

    YOLO You Only Look Once 是一种目标检测算法 由Joseph Redmon等人在2015年提出 它的主要思想是将目标检测任务看作是一个回归问题 并且可以在一个神经网络中同时预测目标的位置和类别 自2015年YOLO第一
  • ChatGPT会取代互联网程序员吗?

    ChatGPT会取代互联网程序员吗 ChatGPT是一个基于GPT 3模型的自然语言对话系统 它可以与用户进行自然 流畅 智能的对话交互 回答用户的问题 提供用户所需的信息 甚至生成一些有趣和创意的内容 ChatGPT最近火爆全网 一时间C
  • Linux系统启动分析

    文章目录 大体流程分析 一 BIOS 1 1 BIOS简介 1 2 POST 二 BootLoader GRUB 2 1 What s MBR 2 2 What s GRUB 2 3 boot img 2 4 core img lzma d
  • 我花了一夜用数据结构给女朋友写个H5走迷宫游戏

    文章目录 起因 分析 画线 棋盘 画迷宫 方块移动 结语 先看效果图 在线电脑尝试地址http biggsai com maze html 起因 又到深夜了 我按照以往在公众号写着数据结构 这占用了我大量的时间 我的超越妹妹严重缺乏陪伴而
  • Vue-数据驱动视图(一)数据监听机制

    前言 Vue的一大特点就是数据双向绑定 当数据发生变化时 也可以同时触发界面的变化 即数据驱动视图 要想实现数据驱动视图 那么有这么几个步骤 1 收集我们需要监听的数据 并给他配置个监听器 当数据状态发生变化时触发监听器 然后判断是否需要重
  • Echarts地图自定义图标Symbol同时动态更改图标进行切换显示

    Echarts地图自定义图标Symbol同时动态更改图标进行切换显示 文章目录 0 前言 1 引用模块 2 界面设计 3 数据准备 4 实例地图 5 动态修改气泡图标 6 结束语 0 前言 实现的效果 实现广东显示地图 然后点击地图上的气泡
  • MATLAB数据曲线拟合

    MATLAB数据曲线拟合 数据拟合是我们常用的一种方法 可以通过一组离散的数据点来找到一个函数 使这个函数能够对数据进行预测和描绘 在MATLAB中实现数据拟合非常简单 而且MATLAB还提供了许多工具箱来帮助我们完成这项任务 下面我们将会
  • JAVA并发编程学习笔记10-volatile

    JAVA并发编程学习笔记10 volatile 概念 JMM JAVA内存模型 常见概念 可见性 指令重排序 happens before规则 synchronized volatile Thread start 方法 Thread int
  • 手把手使用Python教你破解谷歌(Google)人机验证码—上篇

    点击上方 Python爬虫与数据挖掘 进行关注 回复 书籍 即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 众里寻他千百度 蓦然回首 那人却在 灯火阑珊处 1 前言 今天呢 咱们来说一下Google 我们都知道 Google
  • 嵌入式习题

    2 STMF4 1 单选题 关于ARM的描述正确的是 D A 代表一家公司名字 B 代表一类处理器 B 代表一种技术 D 以上都正确 2 单选题 STM32F4与ARM的关系 正确的是 A A STM32F4采用ARM Cortex M4内
  • C#教程(6)———— 比较运算符与逻辑运算符

    C 教程 6 比较运算符与逻辑运算符 前言 1 比较运算符 1 1 不同数据类型之间比较 1 2 使用比较运算符比较字符类型 1 3 其它数据类型比较 2 逻辑运算符 总结 前言 在之前的文章中 我们介绍了各种数学运算该怎么进行 而在数学中