OR, AND Operator

14
新手问题。如何计算公式 A f B 的值,其中 f 是二元函数 OR 或 AND?

1
你是指布尔运算还是二进制运算? - Nick Craver
8个回答

23

条件运算符&&和||与布尔运算符&和|之间存在区别。主要区别在于优先级(哪些运算符首先被计算),以及&&和||是“短路”的。这意味着,如果序列如下...

cond1 && cond2 && cond3
如果cond1为假,那么既不会评估cond2也不会评估cond3,因为代码正确地假设不管它们的值如何,表达式都不能为真。同样地...
cond1 || cond2 || cond3
如果cond1为真,则无论cond2和cond3的值是什么,表达式都必须为true,因此不会对它们进行评估。
按位运算符的替代品 "&" 和 "|" 不会被转义。
希望这有所帮助。

3
我想你的意思是“按位运算”的对应项,而不是“布尔运算”的对应项。 - ThiefMaster

18

逻辑或是||,逻辑与是&&。 如果你需要取反操作NOT,请在表达式前添加!

例如:

X = (A && B) || C || !D;

当A和B都为真时或C为真或D不为真(即假)时,X将为真。

如果你想要进行按位AND/OR/NOT操作,你会使用&|~。但是,如果你处理的是布尔/真值类型的数据,你不应该使用它们。这是因为按位运算的方式导致了它们无法提供短路计算。


根据MSDN,逻辑或是|,逻辑与是&。而条件或是||,条件与是&&。 - Prabhanjan Kumar Mahapatra
1
哎呀,这措辞太糟糕了。他们为什么不能直接称之为“二进制或/与”呢? - ThiefMaster

2
if(A == "haha" && B == "hihi") {
//hahahihi?
}

if(A == "haha" || B != "hihi") {
//hahahihi!?
}

0

我不确定这是否回答了你的问题,但是举个例子:

if (A || B)
{
    Console.WriteLine("Or");
}

if (A && B)
{
    Console.WriteLine("And");
}

你的例子只有在 A && B 为 false 的情况下才会到达 && 的评估,此时它将无法通过第二个语句。 - James
@James - 除非Console.WriteLine()执行线程中止,否则这不是真的,我不知道? :) - Nick Craver
1
哈哈,@詹姆斯...也许他认为这是一个if/else或其他什么东西。 - Kiril
1
如果A或B为真,另一个为假,则控制台输出将是“Or”。如果A和B都为真,则控制台输出将是“Or”,“And”。否则什么也不会输出。不确定关于线程中止的讨论是什么意思...?! - Martin Randall
是的 - 抱歉各位 - 第一个答案是 if/else,我意识到了我的错误并进行了更正。抱歉,@James :-) - Paul Michaels

0

使用'&&'表示AND,使用'||'表示OR,例如:

bool A;
bool B;

bool resultOfAnd = A && B; // Returns the result of an AND
bool resultOfOr = A || B; // Returns the result of an OR

0

-1

&& 运算符只有在两个操作数都为真时才返回真,这意味着

bool and(bool b1, bool b2)]
{
 if(b1==true)
 {
   if(b2==true)
    return true;
 }
 return false;
}

|| 它的操作返回 true,如果一个或两个操作数为 true,这意味着

bool or(bool b1,bool b2)
{
 if(b1==true)
 return true;
 if(b2==true)
 return true;
 return false;
}

如果你写

y=45&&34//45 binary 101101, 35 binary 100010

最终结果为:

y=32// in binary 100000

因此,我上面写的是针对每一对比特使用的。

你最后一个段落是不正确的。这对于按位与(&)是正确的,但显然不适用于布尔与。 - ThiefMaster

-1

以上有很多答案,我会尝试另一种方式:

如果你正在寻找位运算,只需使用以下其中一个符号:

3 & 1 //==1 - 与 4 | 1 //==5 - 或


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接