Java中的管道(|)运算符

ben*_*ham 48 java operators

我在Java中得到了这样的声明:

System.out.println(3|4); 
Run Code Online (Sandbox Code Playgroud)

为什么输出7?

Jon*_*ust 88

这是一个按位OR运算.它正在修改二进制级别的东西.

             011                     3
in binary: | 100     in decimal:  |  4
             ___                   ___
             111                     7
Run Code Online (Sandbox Code Playgroud)

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

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


Mik*_*els 41

运算符|执行"按位OR".如果两个位为1,则两位上的按位OR的输出为1,如果两个位均为0,则为两位数的按位或仅对每个位进行逐位或运算.

继承人如何3|4运作:

  3:  00000011
  4:  00000100
--------------
3|4:  00000111 = 7
Run Code Online (Sandbox Code Playgroud)


dcp*_*dcp 10

它正在进行bitwise OR操作,3 OR4是7.

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

  • @Tim:给出一个有用且正确但不完美/完整的答案绝不违背"SO的目的". (4认同)
  • 确实.为了稍微扩展dcp的解释,在Java中,单个管道"|"就是所谓的"按位OR".这意味着它对构成参数的实际位执行低级别OR.在这种情况下,3是"0011",4是"0100"(显示最少4个有效位).按位OR通过每个位并将其设置为1,如果***中的任何一个是1,那么在这种情况下你得到`0111`,或7.你实际上打算打印出来的是什么,或者这是一个例子从书/教程? (3认同)
  • @dcp,对不起你不以为然.我的个人意见是简单地说"3 OR 4是7"是一个递归定义.它根本没有解释为什么会这样.如果您想提供扩展答案的链接,那太棒了.但你的答案也应该是明确和完整的.只是我个人的意见.另请参阅:http://meta.stackexchange.com/questions/8724/how-to-deal-with-google-questions (3认同)

dav*_*ryn 9

二进制表示:

 3 = 00000011
 4 = 00000100

| is bitwise OR operator
Run Code Online (Sandbox Code Playgroud)

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

所以

00000011
00000100
--------
00000111
Run Code Online (Sandbox Code Playgroud)

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

128, 64, 32, 16, 8, 4, 2, 1
Run Code Online (Sandbox Code Playgroud)

所以

128, 64, 32, 16, 8, 4, 2, 1
 0 ,  0,  0,  0, 0, 1, 1, 1  
Run Code Online (Sandbox Code Playgroud)

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

4 + 2 + 1 = 7
Run Code Online (Sandbox Code Playgroud)