【从零开始入门unity游戏开发之——C#篇08】逻辑运算符、位运算符

文章目录

  • 一、逻辑运算符
    • 1、**`&&`(逻辑与)**
      • 语法:
      • 示例:
    • 2、**`||`(逻辑或)**
      • 语法:
      • 示例:
    • 3、**`!`(逻辑非)**
      • 语法:
      • 示例:
    • 4、**`^`(逻辑异或)**
      • 语法:
      • 示例:
    • 5、**短路运算**
      • 示例:
    • 6、**结合使用逻辑运算符**
      • 示例:
    • 7、总结
  • 二、位运算符
    • 1、**按位与(`&`)**
      • 语法:
      • 示例:
    • 2、**按位或(`|`)**
      • 语法:
      • 示例:
    • 3、**按位异或(`^`)**
      • 语法:
      • 示例:
    • 4、**按位取反(`~`)**
      • 语法:
      • 示例:
    • 5、**左移(`<<`)**
      • 语法:
      • 示例:
    • 6、**右移(`>>`)**
      • 语法:
      • 示例:
    • 7、**组合位运算符**
      • 设置某一位为 `1`:
      • 清除某一位为 `0`:
      • 切换某一位:
    • 8、**位运算应用**
      • 示例:检查一个数是否为偶数
    • 9、总结
  • 专栏推荐
  • 完结

一、逻辑运算符

逻辑运算符优先级低于条件运算符算术运算
多个逻辑与组合运用,在没有括号的情况下,从左到右依次看即可。有括号先看括号内

1、&&(逻辑与)

用法: && 运算符用于检查两个条件是否都为 true。只有当两个条件都为 true 时,整个表达式才为 true,否则为 false

规侧: 对两个bool值进行逻辑运算有假侧假同真为真

语法:

条件1 && 条件2

示例:

bool a = true;
bool b = false;
bool result = a && b;  // false,因为 b 是 false
Console.WriteLine(result);  // 输出: false

2、||(逻辑或)

用法: || 运算符用于检查两个条件中至少有一个为 true。如果任意一个条件为 true,整个表达式就为 true,只有两个条件都为 false 时,结果才为 false

规侧:对两个bool值进行逻辑运算有真则真同假为假

语法:

条件1 || 条件2

示例:

bool a = true;
bool b = false;
bool result = a || b;  // true,因为 a 是 true
Console.WriteLine(result);  // 输出: true

3、!(逻辑非)

用法: ! 运算符用于反转布尔值。它将 true 转换为 false,将 false 转换为 true

规则:对一个bool值进行取反,真变假,假变真

语法:

!条件

示例:

bool a = true;
bool result = !a;  // false,因为 a 是 true,!a 就是 false
Console.WriteLine(result);  // 输出: false

4、^(逻辑异或)

用法: ^ 运算符用于检查两个条件是否相异。当两个条件的值不同(即一个为 true,另一个为 false)时,结果为 true;当两个条件相同(都为 true 或都为 false)时,结果为 false

语法:

条件1 ^ 条件2

示例:

bool a = true;
bool b = false;
bool result = a ^ b;  // true,因为 a 和 b 不相同
Console.WriteLine(result);  // 输出: true

5、短路运算

C# 中的 &&|| 运算符是短路运算符。这意味着:

  • 对于 && 运算符,如果第一个条件为 false,则第二个条件不再被检查,因为无论第二个条件是什么,结果都会是 false
  • 对于 || 运算符,如果第一个条件为 true,则第二个条件不再被检查,因为无论第二个条件是什么,结果都会是 true

示例:

bool a = false;
bool b = true;
bool result = a && b;  // false, 不检查 b 的值,因为 a 已经是 false
Console.WriteLine(result);  // 输出: false

6、结合使用逻辑运算符

你可以将多个逻辑运算符组合使用,来处理更复杂的条件表达式。

!(逻辑非)优先级最高,&&(逻辑与)优先级高于||(逻辑或)

逻辑运算符优先级低于算数运算符、条件运算符(逻辑非除外)

示例:

bool a = true;
bool b = false;
bool c = true;bool result = (a || b) && c;  // (true || false) && true -> true && true -> true
Console.WriteLine(result);  // 输出: true

7、总结

C# 中的逻辑运算符帮助你进行条件判断、控制程序流。以下是常见的运算符总结:

  • &&(逻辑与):两个条件都为 true 时结果为 true
  • ||(逻辑或):至少有一个条件为 true 时结果为 true
  • !(逻辑非):反转布尔值。
  • ^(逻辑异或):两个条件不同为 true,相同为 false

二、位运算符

位运算符是操作整数类型(如 int, long, short 等)中各个二进制位的运算符。

位运算符主要用数值类型进行计算的,将数值转换为2进制再进行位运算

多个数值进行位运算,没有括号时,从左到右依次计算

1、按位与(&

功能: 对两个操作数的每一位进行“与”运算。只有两个对应的位都为 1 时,结果位才为 1;否则结果位为 0

有0则0

语法:

a & b

示例:

int a = 5;  // 二进制: 0101
int b = 3;  // 二进制: 0011
int result = a & b;  // 结果: 1, 二进制: 0001
Console.WriteLine(result);  // 输出: 1

2、按位或(|

功能: 对两个操作数的每一位进行“或”运算。只要两个对应的位中有一个为 1,结果位就为 1,只有两个位都为 0 时,结果位才为 0

有1则1

语法:

a | b

示例:

int a = 5;  // 二进制: 0101
int b = 3;  // 二进制: 0011
int result = a | b;  // 结果: 7, 二进制: 0111
Console.WriteLine(result);  // 输出: 7

3、按位异或(^

功能: 对两个操作数的每一位进行“异或”运算。当两个位相同(都为 0 或都为 1)时,结果为 0;当两个位不同(一个为 0,另一个为 1)时,结果为 1

相同为0, 不同为1

语法:

a ^ b

示例:

int a = 5;  // 二进制: 0101
int b = 3;  // 二进制: 0011
int result = a ^ b;  // 结果: 6, 二进制: 0110
Console.WriteLine(result);  // 输出: 6

4、按位取反(~

功能: 对操作数的每一位进行“取反”运算。即 0 变为 11 变为 0

0变1, 1变0

语法:

~a

示例:

int a = 5;  // 二进制: 0101
int result = ~a;  // 结果: -6, 二进制: 1010(在二进制补码表示中)
Console.WriteLine(result);  // 输出: -6

说明: 取反会将整数转换为其补码表示,导致负数结果。

5、左移(<<

功能: 将二进制位向左移动指定的位数。左移几位 右侧补0。

语法:

a << n

n 是你希望左移的位数。

示例:

int a = 5; //二进制为101
int c = a << 5;
//就是将a的二进制向左移动5位,右侧补0
//移动1位 1010
//移动2位 10100
//移动3位 101000
//移动4位 1010000
//移动5位 10100000 => 转10进制 = 160
Console.WriteLine(c);//输出160

6、右移(>>

功能: 将二进制位向右移动指定的位数。右移几位,右侧去掉几个数。

语法:

a >> n

n 是你希望右移的位数。

示例:

int b = 5; //101
int d = b >> 2;
//就是将b的二进制向右移动2位,左侧补符号位
//移动1位 10
//移动2位 1
Console.WriteLine(d);//输出1

7、组合位运算符

位运算符可以组合使用来解决更复杂的问题。常见的做法是通过位运算来设置、清除或切换某一位。

设置某一位为 1

int a = 5;  // 二进制: 0101
int result = a | (1 << 2);  // 设置第3位为1, 结果: 7, 二进制: 0111
Console.WriteLine(result);  // 输出: 7

清除某一位为 0

int a = 5;  // 二进制: 0101
int result = a & ~(1 << 2);  // 清除第3位为0, 结果: 1, 二进制: 0001
Console.WriteLine(result);  // 输出: 1

切换某一位:

int a = 5;  // 二进制: 0101
int result = a ^ (1 << 2);  // 切换第3位, 结果: 1, 二进制: 0001
Console.WriteLine(result);  // 输出: 1

8、位运算应用

位运算在以下场景中非常有用:

  • 权限管理: 利用位掩码(bitmask)管理不同的权限。
  • 检查奇偶: 通过位与操作检查一个数字是奇数还是偶数。
  • 高效的计算: 位移运算比乘除法运算更高效,适合用在性能要求较高的应用中。

示例:检查一个数是否为偶数

int a = 6;
bool isEven = (a & 1) == 0;  // 如果最后一位是0,则为偶数
Console.WriteLine(isEven);  // 输出: True

9、总结

位运算符在 C# 中非常强大,它们主要用于二进制位的操作。常见的位运算符有:

  • &:按位与
  • |:按位或
  • ^:按位异或
  • ~:按位取反
  • <<:左移
  • >>:右移

专栏推荐

地址
【从零开始入门unity游戏开发之——C#篇】
【从零开始入门unity游戏开发之——unity篇】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架开发】

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CEF127 编译指南 MacOS 篇 - 编译 CEF(六)

1. 引言 经过前面的准备工作&#xff0c;我们已经完成了所有必要的环境配置。本文将详细介绍如何在 macOS 系统上编译 CEF127。通过正确的编译命令和参数配置&#xff0c;我们将完成 CEF 的构建工作&#xff0c;最终生成可用的二进制文件。 2. 编译前准备 2.1 确认环境变量 …

环境变量的知识

目录 1. 环境变量的概念 2. 命令行参数 2.1 2.2 创建 code.c 文件 2.3 对比 ./code 执行和直接 code 执行 2.4 怎么可以不带 ./ 2.4.1 把我们的二进制文件拷贝到 usr/bin 路径下&#xff0c;也不用带 ./ 了 2.4.2 把我们自己的路径添加到环境变量里 3. 认识PATH 3.…

从0-1开发一个Vue3前端系统页面-9.博客页面布局

本节主要实现了博客首页界面的基本布局并完善了响应式布局&#xff0c;因为完善了响应式布局故对前面的页面布局有所改动&#xff0c;这里会将改动后的源码同步上传。 1.对页面头部的用户信息进行设计和美化 布局设计参考 &#xff1a;通常初级前端的布局会通过多个div划分区域…

Nginx中Server块配置的详细解析

Nginx中Server块配置的详细解析 一、Server块简介 在Nginx配置文件中&#xff0c;server块是非常关键的部分。它用于定义虚拟主机&#xff0c;一个server块就代表一个虚拟主机。这使得我们可以在一台Nginx服务器上通过不同的配置来处理多个域名或者基于不同端口的服务请求。 …

C# Winform双色纸牌接龙小游戏源码

文章目录 一、设计来源双色纸牌接龙小游戏讲解1.1 主界面1.2 游戏界面1.3 游戏界面快成功了 二、效果和源码2.1 动态效果2.2 源代码 源码下载更多优质源码分享 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/144419994 …

Linux环境下 搭建ELk项目 -单机版练习

前言 ELK 项目是一个由三个开源工具组成的日志处理和分析解决方案&#xff0c;ELK 是 Elasticsearch、Logstash 和 Kibana 的首字母缩写。这个项目的目标是帮助用户采集、存储、搜索和可视化大量的日志和事件数据&#xff0c;尤其是在分布式系统中。下面是每个组件的概述&…

Java写URI网址唤醒APP小程序等NDEF信息

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bvCxCPM&ftt&id615391857885 import com.sun.jna.Library ; import com.sun.jna.Native; import java.io.IOException;interface CLibrary extends Library {//DLL绝…

Qt+OPC开发笔记(一):OPCUA介绍、open62541介绍、编译与基础环境Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/144516882 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

OpenHarmony和OpenVela的技术创新以及两者对比

两款有名的国内开源操作系统&#xff0c;OpenHarmony&#xff0c;OpenVela都非常的优秀。本文对二者的创新进行一个简要的介绍和对比。 一、OpenHarmony OpenHarmony具有诸多有特点的技术突破和重要贡献&#xff0c;以下是一些主要方面&#xff1a; 架构设计创新 分层架构…

【图像配准】方法总结

图像配准(Image registration)就是将不同时间、不同传感器&#xff08;成像设备&#xff09;或不同条件下&#xff08;天候、照度、摄像位置和角度等&#xff09;获取的两幅或多幅图像进行匹配、叠加的过程&#xff0c;就是找到1幅图像像素到另1幅图像像素间的空间映射关系它已…

Ubuntu本地化安装MYSQL及Navicat

本教程记录一下&#xff0c;如何在ubuntu上安装mysql&#xff0c;并安装免费版的数据库图形化连接软件Navicat Linux上安装mysql首选使用docker安装&#xff0c;直接拉取mysql的docker镜像即可&#xff0c;这种方式最简单、快捷&#xff0c;这是linux云端服务器最常用的安装方式…

案例分享|企查查的数据降本增效之路

分享嘉宾 任何强 企查查科技股份有限公司 大数据架构负责人 关于企查查 “企查查”是企查查科技股份有限公司旗下的一款企业信用查询工具。2023年5月20日&#xff0c;企查查正式发布全球首款商查大模型——“知彼阿尔法”&#xff0c;该模型基于企查查覆盖的全球企业信用数据进…

OpenHarmony-3.HDF Display子系统(6)

Display 子系统 1.Display驱动模型介绍 当前操作系统和 SOC 种类繁多&#xff0c;各厂商的显示屏器件也各有不同&#xff0c;随之针对器件的驱动代码也不尽相同&#xff0c;往往是某一款器件驱动&#xff0c;只适用于某单一内核系统或 SOC&#xff0c;如果要迁移到其他内核或者…

【Java Web】Axios实现前后端数据异步交互

目录 一、Promise概述 二、Promise基本用法 三、async和await关键字 四、Axios介绍 4.1 Axios基本用法 4.2 Axios简化用法之get和post方法 五、Axios拦截器 六、跨域问题处理 一、Promise概述 axios是代替原生的ajax实现前后端数据交互的一套新解决方案&#xff0c;而…

龙迅#LT7911E适用于EDP/DP/TPYE-C转MIPIDSI应用,支持图像处理功能,内置I2C,主应用副屏显示,投屏领域!

1. 描述 LT7911E 是一款高性能 eDP 转 MIPI D-PHY 转换器&#xff0c;旨在将 eDP 源连接到 MIPI 显示面板。 LT7911E 集成了一个符合 eDP1.4 标准的接收器&#xff0c;支持 1.62Gbps 至 5.67Gbps 的输入数据&#xff0c;以 270Mbps 的递增步长&#xff0c;以及一个 2 端口 D…

selenium工作原理

原文链接&#xff1a;https://blog.csdn.net/weixin_67603503/article/details/143226557 启动浏览器和绑定端口 当你创建一个 WebDriver 实例&#xff08;如 webdriver.Chrome()&#xff09;时&#xff0c;Selenium 会启动一个新的浏览器实例&#xff0c;并为其分配一个特定的…

RabbitMQ个人理解与基本使用

目录 一. 作用&#xff1a; 二. RabbitMQ的5中队列模式&#xff1a; 1. 简单模式 2. Work模式 3. 发布/订阅模式 4. 路由模式 5. 主题模式 三. 消息持久化&#xff1a; 消息过期时间 ACK应答 四. 同步接收和异步接收&#xff1a; 应用场景 五. 基本使用 &#xff…

游戏何如防抓包

游戏抓包是指在游戏中&#xff0c;通过抓包工具捕获和分析游戏客户端与服务器之间传输的封包数据的过程。抓包工具可实现拦截、篡改、重发、丢弃游戏的上下行数据包&#xff0c;市面上常见的抓包工具有WPE、Fiddler和Charles Proxy等。 抓包工具有两种实现方式&#xff0c;一类…

二进制分析的新兴趋势:塑造安全的移动应用

在当今快速发展的数字世界中&#xff0c;保障移动应用的安全性变得尤为重要。随着移动技术的广泛应用&#xff0c;安全性需求也日益增强。二进制分析作为确保移动应用安全和合规性的重要手段&#xff0c;通过对已编译的应用进行深入分析&#xff0c;能够发现源代码中难以察觉的…

量子通信学习路径(一)

量子通信是一门融合量子力学和通信技术的交叉学科&#xff0c;其核心目标是利用量子力学的特性&#xff08;如叠加态和纠缠&#xff09;实现信息传递和安全通信。以下是一个系统学习量子通信的完整大纲&#xff0c;从基础知识到实际应用逐步深入&#xff0c;帮助建立全面的知识…