我在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
二进制表示:
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)