C# & 运算符说明
Posted
技术标签:
【中文标题】C# & 运算符说明【英文标题】:C# & operator clarification 【发布时间】:2012-09-17 23:32:04 【问题描述】:我在这里看到了几个关于 C# 中 && 和 & 运算符之间区别的问题,但我仍然很困惑它是如何使用的,以及在不同情况下会产生什么结果。比如我刚刚在一个项目中瞥见了下面的代码
bMyBoolean = Convert.ToBoolean(nMyInt & 1);
bMyBoolean = Convert.ToBoolean(nMyInt & 2);
什么时候结果为0,什么时候>0?这个运算符背后的逻辑是什么?运算符'|'有什么区别?
bMyBoolean = Convert.ToBoolean(nMyInt | 1);
bMyBoolean = Convert.ToBoolean(nMyInt | 2);
我们可以使用 &&, ||运算符并获得相同的结果(可能使用不同的代码)?
【问题讨论】:
第二组bMyBoolean
s 平凡地评估为真。
【参考方案1】:
&&
是一个条件语句,用于if
语句和while
if(x>1 && y<3)
这意味着 x 应该大于 1 并且 y 应该小于 3,同时满足这两个条件
if(x>1 || y<3)
满足其中之一
但是,& 和 |分别是按位与和或。 例如:
1 | 0 => 1
1 & 0 => 0
1 & 1 => 1
如果这适用于直整数,则将计算并应用其对应的二进制值
2&1
=> 10 // the binary value of 2
&
01 // the binary value of 1
--
00 // the result is zero
【讨论】:
我认为这并不能很好地解释差异。当您在布尔值上使用&
时会发生什么?在整数上使用 &&
会发生什么?
如果有人想知道为什么10 & 01 == 00
,您可能会了解bitwase操作是如何完成的here。【参考方案2】:
& 符号对其二进制表示中的整数进行按位与。 管道按位或。
在这里查看这些按位运算的含义:http://en.wikipedia.org/wiki/Bitwise_operation
【讨论】:
【参考方案3】:& 和 |是位操作。您必须在位掩码上使用它。 && 和 ||是逻辑运算,因此您只能将其用于布尔值。
位操作示例:
var a = 1;
var b = 2;
var c = a|b;
二进制表示 a = 00000001, b = 00000010 c = 00000011
因此,如果您使用位掩码 c,它将传递值 1、2 或 3。
【讨论】:
【参考方案4】:另一个区别是 & 运算符计算其操作数的逻辑按位与,如果操作数不是 bool(在您的情况下为整数)
【讨论】:
【参考方案5】:& operator is BItwise AND
运算符,它对位进行操作。
例如5 & 3
0101 //5
0011 //3
----------
5&3= 0001 //1
| operator is BItwise OR
运算符,它对位进行操作。
5|3
0101 //5
0011 //3
----------
5|3= 0111 //7
&&
运算符是logical AND operator
- 它是returns true if all conditions are true
例如
if((3>5)&&(3>4)) //returns true
if((6>5)&&(3>4)) //returns false
||
运算符是logical OR operator
-它是returns true if one of the conditions is true
例如
if((3>5)||(3>4)) //returns true
if((6>5)||(3>4)) //returns true
if((6>5)||(5>4)) //returns false
【讨论】:
【参考方案6】:其他答案为您解释了 && 和 & 之间的区别,因此假设您理解这一点。在这里,我只是尝试解释一下您指定的情况。
第一种情况
bMyBoolean = Convert.ToBoolean(nMyInt & 1);
bMyBoolean
false
当nMyInt = 0
因为:
00
& 01
= 00;
第二种情况:
bMyBoolean = Convert.ToBoolean(nMyInt & 2);
bMyBoolean
false
当nMyInt = 0
或1
因为
00
& 10
= 00;
或者:
01
& 10
= 00;
按位的第三种和第四种情况|是微不足道的,因为 bMyBoolean 对于任何 nMyInt 总是为真
bMyBoolean = Convert.ToBoolean(nMyInt | 1);
bMyBoolean = Convert.ToBoolean(nMyInt | 2);
你不能申请 && 或 ||在这种情况下,因为它们仅对bool
有约束,您将编译错误。
【讨论】:
【参考方案7】:和 有一些有趣的事情。按位 as & be,可以使用 如下例所示。
bool result = true;
result &= false;
Console.WriteLine("result = true & false => 0", result );
//result = true & false => False
result = false;
result &= false;
Console.WriteLine("result = false & false => 0", result );
//result = false & false => False
result = true;
result &= true;
Console.WriteLine("result = true & true => 0", result );
//result = true & true => True
【讨论】:
以上是关于C# & 运算符说明的主要内容,如果未能解决你的问题,请参考以下文章