web-dev-qa-db-ja.com

Javaのパイプ(|)演算子

私はJavaでこの文を持っています:

System.out.println(3|4); 

出力が7なのはなぜですか?

46
bentham

これはビット単位のOR操作です。バイナリレベルで物事を変更しています。

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

関数電卓を使用してWindows calcを開きます。 10進数と2進数(および16進数)を切り替えて、or、and、xorなどを含むビット演算を実行できます。

ビット単位で、頭の中や紙の上で行うには、同じ序数の各桁を比較します。いずれかの数値が1の場合、その序数での結果は1になります。

85
Jonathon Faust

オペレーター |は「ビット単位のOR」を実行します。 2ビットのビット単位ORの出力は、いずれかのビットが1の場合は1、両方のビットが0の場合は0です。2ビットのビット単位OR OR各ビットで個別に。

Heres how 3|4動作:

  3:  00000011
  4:  00000100
--------------
3|4:  00000111 = 7
41
Mike Daniels

bitwise OR操作、3 OR 4は7です。

こちらをご覧ください: http://en.wikipedia.org/wiki/Bitwise_OR#OR

10
dcp

バイナリ表現:

 3 = 00000011
 4 = 00000100

| is bitwise OR operator

OR 2つの数字の場合、バイナリ表現を取り、その列のOR結果は1 IFFです。少なくとも1つの列が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
8
davbryn

| 「ビット単位のOR」演算子です。 a | bでは、aおよび/またはbのn番目のビットが1の場合、結果のn番目のビットは1になります。3は2進数で11です。 4はバイナリで100です。

0  1  1
or or or
1  0  0
=  =  =
1  1  1

そして、111はたまたま7のバイナリ表現です。

4
user395760

これの基礎を数えるための一般化されたシステムがあることを理解することは有用です。バイナリはbase-2です。おなじみの10進数は10進数です。 Linuxの許可の8進数は8進数です。

数字の値は、その数字のそれぞれの個々の値を加算することによって取得されます。任意の数字について、値は単純な式から導出されます。

(数字)*(基数)^(小数点の左側の桁数)

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

私はCS211でそれを学んだ(自慢ではなく、ただ覚えている)

4
Aaron Anodide

ビットごとの演算子は、相関するものがないと少し混乱する可能性があるため、それらの機能を非プログラマーに説明した方法は、trueに1を、falseに0を代入するだけで、その後の演算子と同じように動作する英語:

月は青で、空は青、偽です

0および1は0

月は青いOR空は青い、true

0または1は1

しかし、次のようになったときに類推が崩れます。

海は青XOR木は緑、偽

2
Jimmy Hoffa