我在这里看到了几个关于&&和和& C#中的运算符,但我仍然对它的使用方式感到困惑,以及在不同情况下会产生什么结果。例如,我只是在项目中瞥见了以下代码
bMyBoolean = Convert.ToBoolean(nMyInt & 1);
bMyBoolean = Convert.ToBoolean(nMyInt & 2);
当它结果为0且何时> 0?这个运营商背后的逻辑是什么?运营商' |'?
之间有什么不同bMyBoolean = Convert.ToBoolean(nMyInt | 1);
bMyBoolean = Convert.ToBoolean(nMyInt | 2);
我们可以使用&&,||运算符并获得相同的结果(可能使用不同的代码)?
答案 0 :(得分:11)
&&
是有条件的,用于if
语句和while
if(x>1 && y<3)
这意味着x应大于1且y小于3,满足两个条件
if(x>1 || y<3)
满足其中一个
然而,&amp;和|分别是按位AND和OR。 例如:
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
答案 1 :(得分:6)
&符号在二进制表示中对整数执行按位AND运算。 管道按位OR。
请在此处查看这些按位操作的含义:http://en.wikipedia.org/wiki/Bitwise_operation
答案 2 :(得分:4)
&安培;和|是位操作。你必须在位掩码上使用它。 &安培;&安培;和||是逻辑运算,因此您只能将它用于bool值。
位操作示例:
var a = 1;
var b = 2;
var c = a|b;
以二进制格式表示a = 00000001,b = 00000010 c = 00000011
因此,如果使用位掩码c,它将传递值1,2或3。
答案 3 :(得分:2)
另一个区别是&amp;运算符计算其操作数的逻辑按位AND,如果操作数不是bool(在您的情况下为整数)
答案 4 :(得分:2)
& operator is BItwise AND
运算符,它对位进行操作。
例如5&amp; 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
答案 5 :(得分:1)
其他答案向您解释&amp;&amp;和和&amp;,所以假设你明白这一点。在这里,我只想解释你指定的案例。
第一种情况
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);
你无法申请&amp;&amp;或||在这种情况下,因为它们只是bool
的约束,所以你将编译错误。
答案 6 :(得分:0)
&amp; 即可。按位和&amp;是的,它可以使用 按照下面的例子来布尔。
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