Java中的pipe道(|)运算符

我已经在Java中得到了这个声明:

System.out.println(3|4); 

为什么输出7?

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

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

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

要做一个按位或在你的头或纸上,比较相同的序号的每个数字。 如果其中一个数字是1,那么这个序数的结果就是1。

运营商| 做一个“按位或”。 如果两个位中的任一位为1或0,则两位上的按位“或”输出为1.如果两位中的任一位均为0,则两位上的按位“或”只是单独对每位进行按位“或”运算。

如何3|4作品:

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

它是bitwise OR运算,3 OR 4是7。

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

二进制表示:

  3 = 00000011 4 = 00000100 | is bitwise OR operator 

当你或两个数字,你采取二进制表示和OR结果是1 IFF该列至less有一列设置为真(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 

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

认识到有一个统计基础的广义系统是有用的。 二进制是基数2。 熟悉的十进制是基数为10。 Linux权限八进制为8。

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

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

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

我了解到,在CS211(不吹牛,只是记得)

由于按位运算符可能会有点混淆,而没有将它们与之关联起来,所以我向非程序员解释它们的function的方法是,你只需要将1replace为true,将0replace为false,然后它们的行为与英语这门语言:

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

0和1是0

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

0或1是1

但是当我到达时,这个比喻就被打破了:

海洋是蓝色的异或树是绿色的,是假的