我用 Java 编程了大约一年,但仍然发现了一些我不知道的东西。如何:
new Font(FontFamily.TIMES_ROMAN, 12, 1 | 4);
如何 | 对整数有效吗?
谢谢你
PS我google了很多。
我用 Java 编程了大约一年,但仍然发现了一些我不知道的东西。如何:
new Font(FontFamily.TIMES_ROMAN, 12, 1 | 4);
如何 | 对整数有效吗?
谢谢你
PS我google了很多。
|
运算符计算其操作数的“按位或”。要理解它,您必须将操作数转换为二进制:如果该位未在任一数字中设置,则生成“0”位,如果在任一数字中设置,则生成“1”位。
使用您的数字,结果4|1
为 5,因为:
4 = 100
1 = 001
4|1 = 101 = 5
按位或运算符与“按位与”运算符有关&
,如果位未在其中一个数字中设置,则生成“0”,如果在两个数字中都设置,则生成“1”位。
由于这些运算符处理其参数的按位表示,当您习惯于处理十进制(以 10 为基数)数字时,它们可能很难理解。下面的关系成立,这使得当你有另一个时很容易推导出一个结果:
a + b = (a|b) + (a&b)
它是一种按位运算OR
符,在一个或多个位模式或二进制数字的各个位级别上进行操作。
按位 ^ 运算符执行按位异或运算。
如果任何一个操作数为 1,OR 按位运算将返回 1,并且仅当两个操作数都为零时才返回零。
您可以在JLS 15.22.1中获得完整的描述。
0|0 = 0
0|1 = 1
1|0 = 1
1|1 = 1
因此,在您的情况下,操作数是1
and 4
。将它们分别转换为二进制(仅最后 4 位0100
)0001
。|
一点一点地应用现在:
0 1 0 0
0 0 0 1
---------
0 1 0 1 = (5 in base 10)
|
称为按位或。这通过以下方式起作用:
||
对匹配位置的每个数字执行布尔 OR ( )(0 为假,1 为真)例如,
100 | 4
OR 001 | 1
-------+--
101 | 5
构造函数上的属性Font
设计为二进制,恰好一位数字是 1。通过 ORing 这些数字,您可以打开代表 ORed 选项的数字。