Java | 整数的位或运算符

5

我使用Java编程已经有一年了,但仍然发现有些东西我不知道。 以下是我需要了解的内容:

new Font(FontFamily.TIMES_ROMAN, 12, 1 | 4);

如何使用 | 处理整数?

谢谢

P.S. 我谷歌了很多。


4
我可以翻译文档 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html。这篇文章讲解了Java语言中的运算符。它涵盖了算术、位、关系、逻辑和条件运算符,并提供了示例和练习来帮助读者加深对这些运算符的理解。本文还介绍了自增和自减运算符,以及三元运算符。读者将学到如何使用运算符来编写更高效和可读的代码。 - Matt Ball
1 必须是一个属性,4 必须是另一个属性,因此 OR 会同时使用它们。 - huseyin tugrul buyukisik
@huseyintugrulbuyukisik OP 想知道 | 如何组合这两个属性。 - ameed
你经常谷歌搜索,但从未搜索过“Java运算符”吗? - millimoose
您可能也想了解什么是“|=”吗?请访问以下链接:https://dev59.com/QGYq5IYBdhLWcg3wrSas#14296609 - Grijesh Chauhan
3个回答

11
| 运算符计算其操作数的 "按位或"。要理解它,您需要将操作数转换为二进制:如果数字中没有设置位,则它会产生一个“0”位,并且如果数字中设置了位,则它会产生一个“1”位。
对于您的数字,4|1 的结果是5,因为:
  4 = 100
  1 = 001
4|1 = 101 = 5

按位或运算符与“按位与”运算符&相关,如果数字中的一位未设置,则生成“0”,如果在两个数字中都设置,则生成“1”位。

由于这些运算符作用于其参数的按位表示,因此当您习惯于使用十进制(基数10)数字时,它们可能很难理解。以下关系成立,使得在拥有另一个操作数时易于推导出一个操作数的结果:

a + b = (a|b) + (a&b)

1
注意:如果您使用二进制、八进制或十六进制常量,这些运算符对人类来说会更容易理解。例如:0xF124 | 0x0228 = 0xF32C。 - user949300
@user949300 我倾向于将常量定义为 1 << 01 << 1等。你不是在进行数学运算,而是在一个“位数组”中翻转位,使用除位以外的任何东西似乎都是不必要的认知负担。 - millimoose

7

这是一个位或OR运算符,在单个比特的级别上操作一个或多个比特模式或二进制数值

位异或(^)运算符执行位异或运算。

位或运算将在任何操作数为1时返回1,并仅在两个操作数都为0时返回0。

您可以在JLS 15.22.1中获得完整的描述。

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

因此,在您的情况下,操作数为14。将它们转换为二进制(仅使用最后4位)将分别是01000001。现在逐位应用|
0 1 0 0
0 0 0 1
---------
0 1 0 1 = (5 in base 10)

1

| 被称为按位或。它的工作方式是:

  1. 将每个数字转换为二进制
  2. 在匹配位置上对每个数字进行布尔 OR (||) 运算(0 为 false,1 为 true)
  3. 将结果转换回十进制

例如,

   100 | 4
OR 001 | 1
-------+--
   101 | 5
< p > Font 构造函数上的属性被设计成在二进制中只有一个数字是 1。通过对这些数字进行按位或运算,您可以打开表示已进行按位或运算的选项的数字。

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