Java中的管道(|)运算符

时间:2010-07-22 19:27:12

标签: java operators

我在Java中有这样的陈述:

System.out.println(3|4); 

为什么输出7?

7 个答案:

答案 0 :(得分:82)

这是一个按位OR运算。它正在以二进制级别修改内容。

             011                     3
in binary: | 100     in decimal:  |  4
             ___                   ___
             111                     7

使用科学模式打开Windows calc。您可以在十进制和二进制(和十六进制)之间切换,并执行按位运算,包括或,和xor等。

要按位或在脑中或纸上进行,请比较相同序数的每个数字。如果任一数字为1,则该序数的结果将为1。

答案 1 :(得分:41)

运算符|执行“按位OR”。如果两个位都是1,那么两位的按位OR的输出为1,如果两个位都为0,则为0。按两位数的按位或仅对每个位进行逐位或运算。

继承人3|4如何运作:

  3:  00000011
  4:  00000100
--------------
3|4:  00000111 = 7

答案 2 :(得分:10)

正在进行bitwise OR操作,3 OR 4为7。

见这里: http://en.wikipedia.org/wiki/Bitwise_OR#OR

答案 3 :(得分:8)

二进制表示:

 3 = 00000011
 4 = 00000100

| is bitwise OR operator

当您输入两个数字时,您采用二进制表示法,该列的OR结果为1 IFF,至少有一列设置为true(1)

所以

00000011
00000100
--------
00000111

然后,列会告诉您该位置的值:

128, 64, 32, 16, 8, 4, 2, 1

所以

128, 64, 32, 16, 8, 4, 2, 1
 0 ,  0,  0,  0, 0, 1, 1, 1  

任何带有1的列表示您添加该列的值:

4 + 2 + 1 = 7

答案 4 :(得分:4)

|是“按位或”运算符。在a | b中,如果a和/或b的第n位为1,则结果的第n位将为1。 3是二进制的11。 4是二进制100。

0  1  1
or or or
1  0  0
=  =  =
1  1  1

111恰好是7的二进制表示。

答案 5 :(得分:4)

认识到存在一个用于计算其背后的通用系统是有用的。二进制是基数-2。熟悉的小数是基数-10。 Linux权限八进制是基础8。

数字的值是通过将每个数字的各个值相加得到的。对于任何数字,该值都来自一个简单的公式。

(数字)*(基数)^(小数点左边的位数)

123 =一百二十三=(1 * 10 ^ 2)+(2 * 10 ^ 1)+(3 * 10 ^ 0)= 100 + 20 + 3

我在CS211中学到了这一点(不是吹牛,只记得)

答案 6 :(得分:2)

由于按位操作符可能有点令人困惑而没有与它们相关的东西,我向非程序员解释它们的功能的方式甚至是你简单地将1替换为true而0替换为false,然后它们的行为与英语操作员:

月亮是蓝色的,天空是蓝色的,是假的

0和1是0

月亮是蓝色或天空是蓝色,是真的

0或1是1

但是当我到达时,这个类比就会崩溃:

海洋是蓝色的XOR树木是绿色的,是假的