【从零开始入门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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Android开发】安装Android Studio(2023.1.1)

下载安装包 Android Studio2023.1.1百度云盘下载&#xff0c;提取码&#xff1a;6666https://pan.baidu.com/s/1vNJezi7aDOP0poPADcBZZg?pwd6666 安装Android Studio 2023.1.1 双击下载好的安装包 弹出界面点击下一步 继续点击【Next】 更改安装路径后继续点击【Next】 点…

.net winform 实现CSS3.0 泼墨画效果

效果图 代码 private unsafe void BlendImages1(Bitmap img1, Bitmap img2) {// 确定两个图像的重叠区域Rectangle rect new Rectangle(0, 0,Math.Min(img1.Width, img2.Width),Math.Min(img1.Height, img2.Height));// 创建输出图像&#xff0c;尺寸为重叠区域大小Bitmap b…

Linux下部署MySQL8.0集群 - 主从复制(一主两从)

目录 一、部署前准备 1、查看系统信息 # 查看系统版本 cat /etc/red* # 查看系统位数 getconf LONG_BIT[rootlocalhost ~]# cat /etc/red* CentOS Linux release 7.5.1804 (Core) [rootlocalhost ~]# getconf LONG_BIT 642、下载对应安装包 进入MySQL官网&#xff1a;https:…

编辑, 抽成组件

问题 错误思路&#xff1a; 1 dept不能修改&#xff0c; 用watch监听一下&#xff1a;赋值给新的变量进行修改&#xff0c; 问题&#xff1a; currentDept 发生改变&#xff0c; depth也发生了改变&#xff0c;因为是浅拷贝&#xff0c; 用了json.pase(json.stringify(value…

2009 ~ 2019 年 408【计算机网络】大题解析

2009 年 路由算法&#xff08;9’&#xff09; 讲解视频推荐&#xff1a;【BOK408真题讲解-2009年&#xff08;催更就退网版&#xff09;】 某网络拓扑如下图所示&#xff0c;路由器 R1 通过接口 E1 、E2 分别连接局域网 1 、局域网 2 &#xff0c;通过接口 L0 连接路由器 R2 &…

MySQL追梦旅途之慢查询分析建议

一、找到慢查询 查询是否开启慢查询记录 show variables like "%slow%";log_slow_admin_statements&#xff1a; 决定是否将慢管理语句&#xff08;如 ALTER TABLE 等&#xff09;记录到慢查询日志中。 log_slow_extra &#xff1a; MySQL 和 MariaDB 中的一个系…

进阶版 -- 某恋爱话术 app 的爬虫经历与思考(含脚本)

背景 承接前文&#xff0c;由于上一个app 爬出来的数据只有 1w 多条&#xff0c;感觉不是很过瘾 所以这次又找到了一个非破解版 app&#xff0c;数据量大概有 40w&#xff0c;安全等级直线上升 声明 本次爬虫是学习实践行为&#xff0c;获取到的数据均已在 24 小时内全部删…

深入理解 Linux 内核启动流程

目录 一、BIOS 与 Bootloader 1.BIOS&#xff08;Basic Input/Output System&#xff09; 2.Bootloader&#xff08;引导加载程序&#xff09; 二、内核初始化 1.解压内核映像 2.初始化硬件设备 3.建立内存管理系统 4.启动第一个进程&#xff08;init&#xff09; 三、…

Android笔记【19】

具体示例 run: val result someObject.run {// 这里可以使用 thisthis.someMethod() }let: val result someObject?.let {// 这里使用 itit.someMethod() }with: val result with(someObject) {// 这里使用 thissomeMethod() }apply: val obj SomeClass().apply {// 这里使…

【Qt】qt安装

在工作一年之后&#xff0c;还是想做一个Qt的教程&#xff0c;遥想研一刚刚接触Qt&#xff0c;从0到1学习&#xff0c;没有什么参考书籍&#xff0c;网上的资料也不多&#xff0c;幸好Qt官方文档写得好&#xff0c;加上自己肯研究&#xff0c;才堪堪入门。 现在我想自己写一个…

Word使用分隔符实现页面部分分栏

文章目录 Word使用分隔符实现页面部分分栏分隔符使用页面设置 Word使用分隔符实现页面部分分栏 分隔符使用 word中的分隔符&#xff1a; 前面不分栏&#xff0c;后面分栏(或前面分栏&#xff0c;后面不分栏)&#xff0c;只需要在分隔位置处插入分隔符&#xff1a;“连续”即…

搭建Tomcat(四)---Servlet容器

目录 引入 Servlet容器 一、优化MyTomcat ①先将MyTomcat的main函数搬过来&#xff1a; ②将getClass()函数搬过来 ③创建容器 ④连接ServletConfigMapping和MyTomcat 连接&#xff1a; ⑤完整的ServletConfigMapping和MyTomcat方法&#xff1a; a.ServletConfigMappin…

谁说C比C++快?

看到这个问题&#xff0c;我我得说&#xff1a;这事儿没有那么简单。 1. 先把最大的误区打破 "C永远比C快" —— 某位1990年代的程序员 这种说法就像"自行车永远比汽车省油"一样荒谬。我们来看个例子&#xff1a; // C风格 char* str (char*)malloc(100…

html <a>设置发送邮件链接、打电话链接 <a href=“mailto:></a> <a href=“tel:></a>

1.代码 <ul><li>电话&#xff1a;<a href"tel:18888888888">188-8888-8888</a></li><li>邮箱&#xff1a;<a href"mailto:10000qq.com">10000qq.com</a></li><li>邮箱&#xff1a;<a hre…

Nginx三种安装方式

Nginx安装 可以登录 Nginx 的官方网站&#xff1a;https://www.nginx.com/ 找到安装方式。 查看如何安装开源的版本&#xff1a;https://docs.nginx.com/nginx/admin-guide/installing-nginx/installing-nginx-open-source/ 通过官方的说明&#xff0c;也可以知道安装&#…

Android 10 Launcher3 删除谷歌搜索

命令行获取页面 手机处于launcher首页 adb shell dumpsys window | findstr mCurrentFocus 输出 mCurrentFocusWindow{9afb34d u0 com.android.launcher3/com.android.launcher3.Launcher} 找到源码路径 packages/apps/Launcher3/ Android10源码 搜索控件 grep -r -n Apps…

自动驾驶AVM环视算法--python版本的俯视TOP投影模式

c语言版本和算法原理的可以查看本人的其他文档。《自动驾驶AVM环视算法--全景的俯视图像和原图》本文档进用于展示部分代码的视线&#xff0c;获取方式网盘自行获取&#xff08;非免费介意勿下载&#xff09;&#xff1a;链接: https://pan.baidu.com/s/1MJa8ZCEfNyLc5x0uVegto…

前端OpenAPI根据后端Swagger自动生成前端接口报错

测试之后发现是因为Map<Long,List<CommentVO>>的返回值类型的锅&#xff0c;改成Page<List<CommentVO>>即可解决。 前端使用的umiMAX的openapi&#xff0c;报错如下&#xff1a; originalRef: BaseResponseboolean\n "401&q…

java开发入门学习五-流程控制

流程控制语句 if&#xff0c; if...else&#xff0c; if..else if..else 与前端相同 略 switch case 与前端不同的是case不能使用表达式&#xff0c;使用表达式会报错 class TestSwitch {public static void main(String[] args) {// switch 表达式只能是特定的数据类型…

.NET 技术 | 调用系统API创建Windows服务

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…