一、简介

在计算机编程中,OR 的用例是它要么是 布尔逻辑的逻辑结构,要么是用于在位级别操作数据的按位数学运算

逻辑运算符用于根据某些条件做出决策,而按位运算符用于快速二进制计算,包括 IP 地址屏蔽。

在本教程中,我们将学习逻辑运算符和按位 OR 运算符,由 || 表示。和|分别**。**

2. 逻辑或的使用

2.1.怎么运行的

逻辑或运算符适用于布尔操作数。 当至少一个操作数为 true 时,它返回 true 否则返回 false

  • 真实 ||真=真
  • 真实 ||假=真
  • 假||真=真
  • 假||假=假

2.2.例子

让我们借助一些 布尔 变量来理解:

boolean condition1 = true; 
boolean condition2 = true; 
boolean condition3 = false; 
boolean condition4 = false;

当我们对两个 true 操作数应用逻辑或时,结果将为 true

boolean result = condition1 || condition2;
assertTrue(result);

当我们对一个 true 和一个 false 操作数应用逻辑或时,结果将为 true

boolean result = condition1 || condition3; 
assertTrue(result);

当我们对两个 操作数应用逻辑或时,结果将为 false

boolean result = condition3 || condition4; 
assertFalse(result);

当有多个操作数时, 从左到右有效地进行求值 。因此,表达式 条件1 ||条件2 ||条件3 ||条件 4 将产生与以下相同的逻辑:

boolean result1 = condition1 || condition2; 
boolean result2 = result1 || condition3;
boolean finalResult = result2 || condition4;
assertTrue(finalResult);

但实际上,Java 可以对上述表达式采取捷径。

3. 短路

逻辑或运算符具有短路行为。这意味着只要其中一个操作数被评估为 true ,它就会返回 true ,而不评估剩余的操作数。

让我们考虑以下示例:

boolean returnAndLog(boolean value) { 
    System.out.println("Returning " + value); 
    return value; 
} 

if (returnAndLog(true) || returnAndLog(false)) { 
} 

Output:
Returning true

if (returnAndLog(false) || returnAndLog(true)) { 
}

Output:
Returning false
Returning true

在这里我们看到,如果前面的条件为 true ,则不会评估第二个逻辑条件。

我们应该注意,如果调用的任何方法有副作用,则可能会导致意外结果。如果我们重写第一个示例以捕获 if 语句之前的 布尔 值,我们会得到不同的结果:

boolean result1 = returnAndLog(true);
boolean result2 = returnAndLog(false);

if (result1 || result2) {
}

Output:
Returning true
Returning false

4. 按位或的使用

4.1.怎么运行的

按位或是一个二元运算符, 计算两个整数操作数的每个相应位的或 。如果至少一位为 1,则返回 1,否则返回 0。此外,该运算符始终对两个操作数求值:

  • 1 | 1 = 1
  • 1 | 0 = 1
  • 0 | 1 = 1
  • 0 | 0 = 0

因此,当我们对两个整数应用按位或时,结果将是一个新整数。

4.2.例子

让我们考虑一个例子:

int four = 4; //0100 = 4
int three = 3; //0011 = 3
int fourORthree = four | three;
assertEquals(7, fourORthree); // 0111 = 7

现在,我们来看看上述操作是如何工作的。

首先,将每个整数转换为其二进制表示形式:

  • 4 的二进制表示是 0100
  • 3 的二进制表示是 0011

然后,对各个位进行按位或运算,得到表示最终结果的二进制表示形式:

0100
0011
----
0111

现在,当 0111 转换回十进制表示形式时,将为我们提供最终结果:整数 7

当有多个操作数时,按从左到右的顺序求值 。因此,表达式 1 | 2 | 3 | 4 将被评估为:

int result1 = 1 | 2; 
int result2 = result1 | 3;
int finalResult = result2 | 4;
assertEquals(finalResult,7);

5. 兼容类型

在本节中,我们将了解这些运算符兼容的数据类型。

5.1.逻辑或

逻辑 OR 运算符只能与布尔操作数一起使用。并且,将其与整数操作数一起使用会导致编译错误:

boolean result = 1 || 2;

Compilation error: Operator '||' cannot be applied to 'int', 'int

5.2.按位或

除了整数操作数之外,按位 OR 也可以与布尔操作数一起使用。如果至少一个操作数为 true ,则返回 true ,否则返回 false

让我们借助示例中的一些 布尔 变量来理解:

boolean condition1 = true;
boolean condition2 = true;
boolean condition3 = false;
boolean condition4 = false;
 
boolean condition1_OR_condition2 = condition1 | condition2;
assertTrue(condition1_OR_condition2);

boolean condition1_OR_condition3 = condition1 | condition3;
assertTrue(condition1_OR_condition3);

boolean condition3_OR_condition4 = condition3 | condition4;
assertFalse(condition3_OR_condition4);

6. 优先级

让我们回顾一下逻辑运算符和按位 OR 运算符以及其他运算符的优先级:

  • 优先级较高的运算符:++ –– * + – / >> << > < == !=
  • 按位与:&
  • 按位或: |
  • 逻辑与:&&
  • 逻辑或: ||
  • 优先级较低的运算符: ? : = += -= *= /= >>= <<=

一个简单的例子将帮助我们更好地理解这一点:

boolean result = 2 + 4 == 5 || 3 < 5;
assertTrue(result);

考虑到逻辑 OR 运算符的低优先级,上面的表达式将计算为:

  • ((2+4) == 5) || (3 < 5)
  • 然后,(6 == 5) || (3 < 5)
  • 然后,假 ||真的

这使得结果 为真。

现在,考虑另一个使用按位 OR 运算符的示例:

int result = 1 + 2 | 5 - 1;
assertEquals(7, result);

上面的表达式将计算为:

  • (1+2) | (5-1)
  • 然后,3| 4

因此,结果将为 7

七、结论

在本文中,我们学习了如何在布尔和整数操作数上使用逻辑和按位 OR 运算符。

我们还研究了两个运算符之间的主要区别以及它们在其他运算符中的优先级。

与往常一样,示例代码可以在 GitHub 上获取。