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

文章目录

一、逻辑运算符

逻辑运算符优先级低于条件运算符算术运算

多个逻辑与组合运用,在没有括号的情况下,从左到右依次看即可。有括号先看括号内

1、&&(逻辑与)

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

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

语法:

csharp 复制代码
条件1 && 条件2

示例:

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

2、||(逻辑或)

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

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

语法:

csharp 复制代码
条件1 || 条件2

示例:

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

3、!(逻辑非)

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

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

语法:

csharp 复制代码
!条件

示例:

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

4、^(逻辑异或)

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

语法:

csharp 复制代码
条件1 ^ 条件2

示例:

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

5、短路运算

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

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

示例:

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

6、结合使用逻辑运算符

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

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

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

示例:

csharp 复制代码
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

语法:

csharp 复制代码
a & b

示例:

csharp 复制代码
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

语法:

csharp 复制代码
a | b

示例:

csharp 复制代码
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

语法:

csharp 复制代码
a ^ b

示例:

csharp 复制代码
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

语法:

csharp 复制代码
~a

示例:

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

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

5、左移(<<

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

语法:

csharp 复制代码
a << n

n 是你希望左移的位数。

示例:

csharp 复制代码
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、右移(>>

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

语法:

csharp 复制代码
a >> n

n 是你希望右移的位数。

示例:

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

7、组合位运算符

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

设置某一位为 1

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

清除某一位为 0

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

切换某一位:

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

8、位运算应用

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

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

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

csharp 复制代码
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

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

相关推荐
m0_748240253 分钟前
python轻量级框架-flask
开发语言·python·flask
CE贝多芬6 分钟前
WPF的页面设计和实用功能实现
c#·wpf
论迹15 分钟前
【JavaEE】-- 多线程(初阶)2
java·开发语言·java-ee
lovingyk20 分钟前
Unity 脚本控制3D人物模型的BlendShape
unity
+72025 分钟前
如何在java中用httpclient实现rpc post 请求
java·开发语言·rpc
学习两年半的Javaer34 分钟前
Rust语言基础知识详解【一】
开发语言·rust
PyAIGCMaster35 分钟前
50周学习go语言:第四周 函数与错误处理深度解析
开发语言·学习·golang
全栈开发圈36 分钟前
新书速览|Rust汽车电子开发实践
开发语言·rust·汽车
m0_7482382736 分钟前
项目升级Sass版本或升级Element Plus版本遇到的问题
前端·rust·sass
PyAIGCMaster37 分钟前
第二周补充:Go语言中&取地址符与fmt函数详解
开发语言·后端·golang