5

我用 Java 编程了大约一年,但仍然发现了一些我不知道的东西。如何:

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

如何 | 对整数有效吗?

谢谢你

PS我google了很多。

4

3 回答 3

11

|运算符计算其操作数的“按位或”。要理解它,您必须将操作数转换为二进制:如果该位未在任一数字中设置,则生成“0”位,如果在任一数字中设置,则生成“1”位。

使用您的数字,结果4|1为 5,因为:

  4 = 100
  1 = 001
4|1 = 101 = 5

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

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

a + b = (a|b) + (a&b)
于 2013-07-14T15:48:09.173 回答
7

它是一种按位运算OR符,在一个或多个位模式或二进制数字的各个位级别上进行操作

按位 ^ 运算符执行按位异或运算。

如果任何一个操作数为 1,OR 按位运算将返回 1,并且仅当两个操作数都为零时才返回零。

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

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

因此,在您的情况下,操作数是1and 4。将它们分别转换为二进制(仅最后 4 位01000001|一点一点地应用现在:

0 1 0 0
0 0 0 1
---------
0 1 0 1 = (5 in base 10)
于 2013-07-14T15:47:28.240 回答
1

|称为按位或。这通过以下方式起作用:

  1. 将每个数字转换为二进制
  2. ||对匹配位置的每个数字执行布尔 OR ( )(0 为假,1 为真)
  3. 将结果转换回十进制

例如,

   100 | 4
OR 001 | 1
-------+--
   101 | 5

构造函数上的属性Font设计为二进制,恰好一位数字是 1。通过 ORing 这些数字,您可以打开代表 ORed 选项的数字。

于 2013-07-14T15:54:15.480 回答