C# 中的逻辑运算符和位运算符
介绍
C# 支持五种主要类型的运算符,这些运算符根据其存在背后的想法分组在一起。
运算符的类别:
- 算术运算符:对int、double、float等数字执行运算。
- 关系运算符:比较并检查输入对象的相等性
- 逻辑运算符:比较给定对象的位并始终返回布尔结果
- 按位运算符:对各个位执行运算,结果也始终是位
- 赋值运算符:允许我们用一个值初始化一个对象或对其执行特定的操作
- 杂项运算符
运算符优先级的概念规定了复杂表达式的求值逻辑。这因运算符类别而异。有关完整列表,请访问Microsoft官方参考。
本指南将讨论按位运算符和逻辑运算符,包括如何理解它们对代码的影响。
逻辑运算符
此类别的运算符适用于布尔变量或表达式。它允许你使用三个基本操作数:AND、OR和NOT。每个复杂的逻辑表达式都可以使用这些操作数的组合来构建。可以快速绘制真值表来验证逻辑和结果,下面我们将看到这些操作数的真值表。
假设1表示真,0表示假。
AND和OR操作数的真值表:
一个 | 乙 | 和 | 或者 |
---|---|---|---|
1 | 0 | 0 | 1 |
0 | 1 | 0 | 1 |
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
使用AND操作数时,有一种非常简单的方法来理解和计算结果。只要操作数中有0 ,结果就始终为false ,而当两个操作数都是1时,结果为 true。
使用OR操作数也有其简单的逻辑理解方法。只要操作数之间有 ``* ,结果总是true ,而当两个操作数都是0时,结果为 false。
在 C# 中,&&运算符表示AND,而||运算符表示OR。
让我们看一个例子。
using System;
namespace Pluralsight
{
public class LogicalOperators
{
public static void Main()
{
bool a = true;
bool b = false;
Console.WriteLine($"The value of a is {a}, and b is {b}");
Console.WriteLine($"The a && b evaluates to {a&&b}");
Console.WriteLine($"The a || b evaluates to {a || b}");
a = false;
b = false;
Console.WriteLine($"The value of a is {a}, and b is {b}");
Console.WriteLine($"The a && b evaluates to {a && b}");
Console.WriteLine($"The a || b evaluates to {a || b}");
a = true;
b = true;
Console.WriteLine($"The value of a is {a}, and b is {b}");
Console.WriteLine($"The a && b evaluates to {a && b}");
Console.WriteLine($"The a || b evaluates to {a || b}");
a = false;
b = true;
Console.WriteLine($"The value of a is {a}, and b is {b}");
Console.WriteLine($"The a && b evaluates to {a && b}");
Console.WriteLine($"The a || b evaluates to {a || b}");
Console.ReadKey();
}
}
}
执行代码将得到以下输出。
The value of a is True, and b is False
The a && b evaluates to False
The a || b evaluates to True
The value of a is False, and b is False
The a && b evaluates to False
The a || b evaluates to False
The value of a is True, and b is True
The a && b evaluates to True
The a || b evaluates to True
The value of a is False, and b is True
The a && b evaluates to False
The a || b evaluates to True
NOT操作数的真值表:
一个 | 不是 |
---|---|
1 | 0 |
0 | 0 |
在 C# 中,!运算符表示非操作数。
让我们看一个简短的例子来了解它是如何工作的。
using System;
namespace Pluralsight
{
public class LogicalOperators
{
public static void Main()
{
bool a = true;
Console.WriteLine($"The value of a is {a}");
Console.WriteLine($"The !a evaluates to {!a}");
a = false;
Console.WriteLine($"The value of a is {a}");
Console.WriteLine($"The !a evaluates to {!a}");
Console.ReadKey();
}
}
}
执行代码得到以下结果。
The value of a is True
The !a evaluates to False
The value of a is False
The !a evaluates to True
您还可以组合这些表达式来描述应用程序中更复杂的逻辑。
按位运算符
这种类型的运算符可以处理两种类型的变量。一种是整数数值类型,它包含 sbyte、byte、short、ushort、int、uint、long 和 ulong 子类型,另一种是char类型。只要您使用其中任何一种,该运算符都可以工作。
总共有六个位运算符:
- ~ - 补充(翻转位流中的位,使1变成0,反之亦然。)
- & - AND(与逻辑运算符部分的逻辑相同)
- | - 或(与逻辑运算符部分的逻辑相同)
- ^ - 排他或(如果任一操作数中都有1但不是同时都有,则该位被翻转。)
- << - 左移(将位向左侧移动指定的量。)
- >> - 右移(将位向右侧移动指定的量。)
我们将用两个数字来演示这些操作数:
十进制 | 二进制 |
---|---|
6 | 0000 0110 |
17 | 0001 0001 |
让我们创建演示。
using System;
namespace Pluralsight
{
public class LogicalOperators
{
public static void Main()
{
int a = 6;
int b = 17;
Console.WriteLine($"The value of a is {a} in binary: {Convert.ToString(a, 2)}, b is {b} in binary: {Convert.ToString(b, 2)}!");
Console.WriteLine("Bitwise OR");
Console.WriteLine($"The bitwise OR result is {a | b} in binary: { Convert.ToString((a|b), 2)}");
Console.WriteLine("Bitwise AND");
Console.WriteLine($"The bitwise AND result is {a & b} in binary: { Convert.ToString((a & b), 2)}");
Console.WriteLine("Bitwise Complement");
Console.WriteLine($"The bitwise AND result is {~a} in binary: { Convert.ToString((~a), 2)}");
Console.WriteLine("Bitwise XOR");
Console.WriteLine($"The bitwise AND result is {a ^ b} in binary: { Convert.ToString((a ^ b), 2)}");
Console.WriteLine("Bitwise <<");
Console.WriteLine($"The bitwise AND result is {a << b} in binary: { Convert.ToString((a << b), 2)}");
Console.WriteLine("Bitwise >>");
Console.WriteLine($"The bitwise AND result is {a >> b} in binary: { Convert.ToString((a >> b), 2)}");
Console.ReadKey();
}
}
}
执行代码得到以下结果。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~