位运算符【&和|】在C#中的运行结果
本文讨论C#中bool类型在位运算符 &(与运算) 和 |(或运算)的结果
&(与运算)在数值中运算的过程是先把 数字 转换成二进制, 同位均为1 则该位为1
|(或运算)在数值中运算的过程是先把 数字 转换成二进制, 同位中有1 则该位为1
bool bol1 = false, bol2 = false;
bool Result = bol1 & bol2;
if (Result == true)
{
Debug.WriteLine("False & False = True");
}
if (Result == false)
{
Debug.WriteLine("False & False = False");
}
Result = bol1 | bol2;
if(Result==true)
{
Debug.WriteLine("False | False = True");
}
if (Result == false)
{
Debug.WriteLine("False | False = False");
}
bol1 = false; bol2 = true;
Result = bol1 & bol2;
if (Result == true)
{
Debug.WriteLine("False & True = True");
}
if (Result == false)
{
Debug.WriteLine("False & True = False");
}
Result = bol1 | bol2;
if (Result == true)
{
Debug.WriteLine("False | True = True");
}
if (Result == false)
{
Debug.WriteLine("False | True = False");
}
bol1 = true; bol2 = false;
Result = bol1 & bol2;
if (Result == true)
{
Debug.WriteLine("True & False = True");
}
if (Result == false)
{
Debug.WriteLine("True & False = False");
}
Result = bol1 | bol2;
if (Result == true)
{
Debug.WriteLine("True | False = True");
}
if (Result == false)
{
Debug.WriteLine("True | False = False");
}
bol1 = true; bol2 = true;
Result = bol1 & bol2;
if (Result == true)
{
Debug.WriteLine("True & True = True");
}
if (Result == false)
{
Debug.WriteLine("True & True = False");
}
Result = bol1 | bol2;
if (Result == true)
{
Debug.WriteLine("True | True = True");
}
if (Result == false)
{
Debug.WriteLine("True | True = False");
}
VS 中OutPut输出结果
False & False = False
False | False = False
False & True = False
False | True = True
True & False = False
True | False = True
True & True = True
True | True = True
继续探讨,如果不要用变量能够在If中时用吗,代码如下
bool bol1 = false, bol2 = false;
if (bol1 & bol2 == true)
{
Debug.WriteLine("if(False & False = True) CondictionExecuted");
}
if (bol1 & bol2 == false)
{
Debug.WriteLine("if(False & False = False) CondictionExecuted");
}
if (bol1 | bol2 == true)
{
Debug.WriteLine("if(False | False = True) CondictionExecuted");
}
if (bol1 | bol2 == false)
{
Debug.WriteLine("if(False | False = False) CondictionExecuted");
}
bol1 = false; bol2 = true;
if (bol1 & bol2 == true)
{
Debug.WriteLine("if(False & True = True) CondictionExecuted");
}
if (bol1 & bol2 == false)
{
Debug.WriteLine("if(False & True = False) CondictionExecuted");
}
if (bol1 | bol2 == true)
{
Debug.WriteLine("if(False | True = True) CondictionExecuted");
}
if (bol1 | bol2 == false)
{
Debug.WriteLine("if(False | True = False) CondictionExecuted");
}
bol1 = true; bol2 = false;
if (bol1 & bol2 == true)
{
Debug.WriteLine("if(True & False = True) CondictionExecuted");
}
if (bol1 & bol2 == false)
{
Debug.WriteLine("if(True & False = False) CondictionExecuted");
}
if (bol1 | bol2 == true)
{
Debug.WriteLine("if(True | False = True) CondictionExecuted");
}
if (bol1 | bol2 == false)
{
Debug.WriteLine("if(True | False = False) CondictionExecuted");
}
bol1 = true; bol2 = true;
if (bol1 & bol2 == true)
{
Debug.WriteLine("if(True & True = True) CondictionExecuted");
}
if (bol1 & bol2 == false)
{
Debug.WriteLine("if(True & True = False) CondictionExecuted");
}
if (bol1 | bol2 == true)
{
Debug.WriteLine("if(True | True = True) CondictionExecuted");
}
if (bol1 | bol2 == false)
{
Debug.WriteLine("if(True | True = False) CondictionExecuted");
}
此时VS OutPut窗口输出:多么痛的领悟。。。。。
if(True | False = True) CondictionExecuted
if(True | False = False) CondictionExecuted
if(True | True = True) CondictionExecuted
if(True | True = False) CondictionExecuted
if(False | False = False) CondictionExecuted
if(False | True = True) CondictionExecuted
if(True & False = False) CondictionExecuted
if(True | False = True) CondictionExecuted
if(True | False = False) CondictionExecuted
if(True & True = True) CondictionExecuted
if(True | True = True) CondictionExecuted
if(True | True = False) CondictionExecuted
上面不是&运算符符合逻辑码, 接下来对3个bool进行&运算,结果很是失望!
bool bol1, bol2, bol3;
// 全为True
bol1 = bol2 = bol3 = true;
if (bol1 & bol2 & bol3 == true)
{
Debug.WriteLine("True & True & True = True!");
}
if (bol1 & bol2 & bol3 == false)
{
Debug.WriteLine("True & True & True = False!");
}
//1个为False
bol1 = false; bol2 = true; bol3 = true;
if (bol1 & bol2 & bol3 == true)
{
Debug.WriteLine("False & True & True = True!");
}
if (bol1 & bol2 & bol3 == false)
{
Debug.WriteLine("False & True & True = False!");
}
bol1 = true; bol2 = false; bol3 = true;
if (bol1 & bol2 & bol3 == true)
{
Debug.WriteLine("True & False & True = True!");
}
if (bol1 & bol2 & bol3 == false)
{
Debug.WriteLine("True & False & True = False!");
}
bol1 = true; bol2 = true; bol3 = false;
if (bol1 & bol2 & bol3 == true)
{
Debug.WriteLine("True & True & False = True!");
}
if (bol1 & bol2 & bol3 == false)
{
Debug.WriteLine("True & True & False = False!");
}
//2个False
bol1 = false; bol2 = false; bol3 = true;
if (bol1 & bol2 & bol3 == true)
{
Debug.WriteLine("False & False & True = True!");
}
if (bol1 & bol2 & bol3 == false)
{
Debug.WriteLine("False & False & True = False!");
}
bol1 = false; bol2 = true; bol3 = false;
if (bol1 & bol2 & bol3 == true)
{
Debug.WriteLine("False & True & False = True!");
}
if (bol1 & bol2 & bol3 == false)
{
Debug.WriteLine("False & True & False = False!");
}
bol1 = true; bol2 = false; bol3 = false;
if (bol1 & bol2 & bol3 == true)
{
Debug.WriteLine("True & False & False = True!");
}
if (bol1 & bol2 & bol3 == false)
{
Debug.WriteLine("True & False & False = False!");
}
//全为False
bol1 = false; bol2 = false; bol3 = false;
if (bol1 & bol2 & bol3 == true)
{
Debug.WriteLine("False & False & False = True!");
}
if (bol1 & bol2 & bol3 == false)
{
Debug.WriteLine("False & False & False = False!");
}
输出结果如下,这结果很是肯爹啊,一定有其他原因
True & True & True = True!
True & True & False = False!
然后脑海中又有了运算符优先级的问题
bool bol1, bol2, bol3;
// 全为True
bol1 = bol2 = bol3 = true;
if ((bol1 & bol2 & bol3) == true)
{
Debug.WriteLine("(True & True & True) = True!");
}
if ((bol1 & bol2 & bol3) == false)
{
Debug.WriteLine("(True & True & True) = False!");
}
//1个为False
bol1 = false; bol2 = true; bol3 = true;
if ((bol1 & bol2 & bol3) == true)
{
Debug.WriteLine("(False & True & True) = True!");
}
if ((bol1 & bol2 & bol3) == false)
{
Debug.WriteLine("(False & True & True) = False!");
}
bol1 = true; bol2 = false; bol3 = true;
if ((bol1 & bol2 & bol3) == true)
{
Debug.WriteLine("(True & False & True) = True!");
}
if ((bol1 & bol2 & bol3) == false)
{
Debug.WriteLine("(True & False & True) = False!");
}
bol1 = true; bol2 = true; bol3 = false;
if ((bol1 & bol2 & bol3) == true)
{
Debug.WriteLine("(True & True & False) = True!");
}
if ((bol1 & bol2 & bol3) == false)
{
Debug.WriteLine("(True & True & False) = False!");
}
//2个False
bol1 = false; bol2 = false; bol3 = true;
if ((bol1 & bol2 & bol3) == true)
{
Debug.WriteLine("(False & False & True) = True!");
}
if ((bol1 & bol2 & bol3) == false)
{
Debug.WriteLine("(False & False & True) = False!");
}
bol1 = false; bol2 = true; bol3 = false;
if ((bol1 & bol2 & bol3) == true)
{
Debug.WriteLine("(False & True & False) = True!");
}
if ((bol1 & bol2 & bol3) == false)
{
Debug.WriteLine("(False & True & False) = False!");
}
bol1 = true; bol2 = false; bol3 = false;
if ((bol1 & bol2 & bol3) == true)
{
Debug.WriteLine("(True & False & False) = True!");
}
if ((bol1 & bol2 & bol3) == false)
{
Debug.WriteLine("(True & False & False) = False!");
}
//全为False
bol1 = false; bol2 = false; bol3 = false;
if ((bol1 & bol2 & bol3) == true)
{
Debug.WriteLine("(False & False & False) = True!");
}
if ((bol1 & bol2 & bol3) == false)
{
Debug.WriteLine("(False & False & False) = False!");
}
Visual Studio输出如下,符合预期:
(True & True & True) = True!
(False & True & True) = False!
(True & False & True) = False!
(True & True & False) = False!
(False & False & True) = False!
(False & True & False) = False!
(True & False & False) = False!
(False & False & False) = False!
然后修改了上面 if(bool 位运算符 bool == true)格式代码为if((bool 位运算符 bool) == true)
bool bol1 = false, bol2 = false;
if ((bol1 & bol2) == true)
{
Debug.WriteLine("if((False & False) = True) CondictionExecuted");
}
if ((bol1 & bol2) == false)
{
Debug.WriteLine("if((False & False) = False) CondictionExecuted");
}
if ((bol1 | bol2) == true)
{
Debug.WriteLine("if((False | False) = True) CondictionExecuted");
}
if ((bol1 | bol2) == false)
{
Debug.WriteLine("if((False | False) = False) CondictionExecuted");
}
bol1 = false; bol2 = true;
if ((bol1 & bol2) == true)
{
Debug.WriteLine("if((False & True) = True) CondictionExecuted");
}
if ((bol1 & bol2) == false)
{
Debug.WriteLine("if((False & True) = False) CondictionExecuted");
}
if ((bol1 | bol2) == true)
{
Debug.WriteLine("if((False | True) = True) CondictionExecuted");
}
if ((bol1 | bol2) == false)
{
Debug.WriteLine("if((False | True) = False) CondictionExecuted");
}
bol1 = true; bol2 = false;
if ((bol1 & bol2) == true)
{
Debug.WriteLine("if((True & False) = True) CondictionExecuted");
}
if ((bol1 & bol2) == false)
{
Debug.WriteLine("if((True & False) = False) CondictionExecuted");
}
if ((bol1 | bol2) == true)
{
Debug.WriteLine("if((True | False) = True) CondictionExecuted");
}
if ((bol1 | bol2) == false)
{
Debug.WriteLine("if((True | False) = False) CondictionExecuted");
}
bol1 = true; bol2 = true;
if ((bol1 & bol2) == true)
{
Debug.WriteLine("if((True & True) = True) CondictionExecuted");
}
if ((bol1 & bol2) == false)
{
Debug.WriteLine("if((True & True) = False) CondictionExecuted");
}
if ((bol1 | bol2) == true)
{
Debug.WriteLine("if((True | True) = True) CondictionExecuted");
}
if ((bol1 | bol2) == false)
{
Debug.WriteLine("if((True | True) = False) CondictionExecuted");
}
VS此时输出如下,果然是运算符的问题
if((False & False) = False) CondictionExecuted
if((False | False) = False) CondictionExecuted
if((False & True) = False) CondictionExecuted
if((False | True) = True) CondictionExecuted
if((True & False) = False) CondictionExecuted
if((True | False) = True) CondictionExecuted
if((True & True) = True) CondictionExecuted
if((True | True) = True) CondictionExecuted
位运算符&和|的运算结果能够给另一个变量, 但是放到if可能会有问题(已知运算符优先级),所以If要用&&和||出错的概率比较少
bool和int可以直接相互转换
false强转int 值就是0
true 强转int 值就是1
C#中如何将bool转Int32
bool b01 = true;
Console.WriteLine(Convert.ToInt32(b01));
b01 = false;
Console.WriteLine(Convert.ToInt32(b01));
转载保留源出处即可,商业使用请自行鉴别,使用本博客中公开内容做任何违法犯罪于本作者无关