J中的管道(|)运算符

我在Java中有以下语句:

System.out.println(3|4); 

为什么输出7?

bentham asked 2020-02-14T05:24:46Z
7个解决方案
87 votes

这是按位或运算。 它在二进制级别上进行修改。

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

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

要按位排列或在您的头部或纸上进行比较,请比较同一序数的每个数字。 如果任一数字为1,则该序数的结果为1。

Jonathon Faust answered 2020-02-14T05:40:06Z
41 votes

运算符3|4执行“按位或”。 如果任一位为1,则两个位的按位OR的输出为1;如果两个位均为0,则输出为0。两个数字的按位OR分别对每个位进行按位OR。

以下是3|4的工作方式:

  3:  00000011
  4:  00000100
--------------
3|4:  00000111 = 7
Mike Daniels answered 2020-02-14T05:40:31Z
10 votes

它正在执行bitwise OR操作,而3 OR 4是7。

看这里:[http://en.wikipedia.org/wiki/Bitwise_OR#OR]

dcp answered 2020-02-14T05:40:56Z
9 votes

二进制表示形式:

 3 = 00000011
 4 = 00000100

| is bitwise OR operator

当您对两个数字进行“或”运算时,您采用二进制表示形式,并且该列的“或”结果为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
davbryn answered 2020-02-14T05:41:38Z
4 votes

| 是“按位或”运算符。 在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的二进制表示。

answered 2020-02-14T05:42:04Z
4 votes

意识到有一个通用的系统对此进行计数非常有用。 二进制为2。 熟悉的十进制是10。 Linux权限八进制为8。

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

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

123 = 123 =(1 * 10 ^ 2)+(2 * 10 ^ 1)+(3 * 10 ^ 0)= 100 + 20 + 3

我在CS211中了解到这一点(不吹牛,只是想起了)

Aaron Anodide answered 2020-02-14T05:42:42Z
2 votes

由于按位运算符可能没有与之关联的内容,因此有些混乱,我向非程序员解释其功能的方式甚至是,您只需将1替换为true,将0替换为false,然后它们的行为与 英语这门语言:

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

0和1为0

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

0或1为1

但是当我到达以下类比时,这个类比就分解了:

海洋是蓝色XOR树木是绿色,是错误的

Jimmy Hoffa answered 2020-02-14T05:43:29Z
translate from https://stackoverflow.com:/questions/3312611/pipe-operator-in-java