C#中布尔逻辑
Dec 1, 2015 Vink C#

C#中布尔逻辑

C#中,bool类型可以有两个值:true或false。这种类型常常用于记录某些操作的结果,当然也用作存储比较结果,用以判断。

布尔逻辑在其他语言中也非常常见,用法也很简单,但也有一些需要注意的地方,一边学一边做些笔记吧。

  • 有时候无意间假设val1 < val2是false,而认为val1 > val2便是true,需要注意,还有val1 == val2这个情况。

  • 使用&&||运算符来代替&|,性能会有一定提高,在大量使用这些运算符的应用程序中表现尤为明显。例如说,&&运算符的第一个操作数是false,则不需要考虑第二个操作数了,因为无论第二个操作数的值是什么,其结果都是false

另外,还有一个非常有用的例子:

var1 = (var2 != 0) && (var3 / var2 > 2);

在上面的例子中,如果var2是0,则var3 / var2就会导致“除0错误”,或者把var1定义为无穷大。而通过&&先判断var2的值就可以规避这种不经意的错误。

  • &|^运算符还有一个有趣的作用:对数值执行按位操作,它们处理的是变量中存储的一系列位,而不是改变变量值。

例如,考虑以下代码的操作:

int result, op1, op2;
op1 = 4, op2 = 5;
result = op1 & op2;

这里就需要考虑op1op2的二进制表示,它们分别是100101

按位运算

按位对比后,二进制结果为100,即op1 & op2结果是4。

  • C#中还可以使用一元运算符~,它将操作数中的位取反。但需要注意的是整数在.NET中存储的方式称为2的补位,按照2的补位系统,(-x)定义为(~x + 1)。例如,把10和-5相加(即10-5),用32位int表示为:

补位相减

忽略最左端的1,就得到10-5的二进制表示,即十进制5。类似地~1 = 2这样比较奇怪的结果就是因为底层的结构强制生成了这个结果。

  • 除了上面介绍的&|^~外,还有两个移位运算符:>><<。比如说下面这个例子:
int var1, var2 = 10, var3 = 2;
var1 = var2 << var3;

最终var1的值是40。具体执行过程如下:var2的二进制值是1010,把该二进制值向左移位两位(var3),得到101000,即十进制中的40。实际上,是执行了乘法操作,每向左移动一位,该数都要乘以2。

类似地,每向右移动一位,则将操作数除以2,并丢弃非整数余数:

int var1, var2 = 10, var3;
var1 = var2 >> 1;
var3 = var2 >> 2;

上面示例中,var1的值是5,而var3的值是2。

  • 按位移位运算符主要用于高度优化的代码,通常用于设备驱动程序或是系统代码。

Share this post


Comments