我在Java中有这样的陈述:
System.out.println(3|4);
为什么输出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。
答案 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树木是绿色的,是假的