ビット演算子

ビット演算子を各プログラミング言語で比較。

ビット演算子のオペランドは整数に限られるが、論理型でも同じ演算子が使えるものもある。

Go言語 (golang)

&
ビット積(AND)。オペランドは整数に限られ、boolでは使えない。
|
ビット和(OR)。オペランドは整数に限られ、boolでは使えない。
^
ビットごとの否定(NOT)。符号は反転される。オペランドは整数に限られ、boolでは使えない。
&^
ビットクリア(AND NOT)。オペランドは整数に限られ、boolでは使えない。
<<
左シフト(整数を2倍)。符号ビットは左端で消えるので符号は保存されない。
>>
右シフト(整数を2分の1)。左オペランドが符号ありの場合は、左端は符号ビットで埋められるので符号は保存される。 左オペランドが符号なしの場合は、左端は0で埋められる。

Java

&
ビット積(AND)。boolean同士でも使える。
|
ビット和(OR)。boolean同士でも使える。
^
ビットごとの排他的論理和(XOR)。boolean同士でも使える。
~
ビットごとの否定(NOT)。booleanの否定! という演算子を使う。
<<
左シフト(整数を2倍)。符号ビットは左端で消えるので符号は保存されない。
>>
符号あり右シフト(整数を2分の1)。左端は符号ビットで埋められるので符号は保存される。
>>>
符号なし右シフト(整数を2分の1)。左端は0で埋められるので負の場合は符号が保存されない。

&, |, ^ は整数同士だけでなく、boolean 同士でも使える。 論理演算子参照。

シフト演算子はintに対しては31まで、longに対しては63までしかシフトできない。シフト演算子の右に32または64を置くと、一切シフトされず、それを超える場合は32または64で割った余りの数だけシフトされる。つまりintの場合は a << ba << (b & 0x1f) とまったく同じになる。

Bitwise and Logical Operators | Java Language Specification
http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22

Bitwise Complement Operator ~ | Java Language Specification
http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.15.5

Shift Operators | Java Language Specification
http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.19

PHP

&
ビット積(AND)
|
ビット和(OR)
^
ビットごとの排他的論理和(XOR)
~
ビットごとの否定(NOT)
<<
左シフト(整数を2倍)。符号ビットは左端で消えるので符号は保存されない。
>>
右シフト(整数を2分の1)。左端は符号ビットで埋められるので符号は保存される。

ビット演算子 | PHP Manual
http://php.net/manual/ja/language.operators.bitwise.php

Python

&
ビット積(AND)
|
ビット和(OR)
^
ビットごとの排他的論理和(XOR)
<<
左シフト(整数を2倍)。左端で整数のビット数を超えると OverflowError が発生する。
>>
右シフト(整数を2分の1)。左端は符号ビットで埋められるので符号は保存される。

ビット演算 | Python 2.7 documentation
http://docs.python.jp/2/reference/expressions.html#binary-bitwise-operation

ビット演算 | Python 3 documentation
http://docs.python.jp/3/reference/expressions.html#binary-bitwise-operations

シフト演算 | Python 2.7 documentation
http://docs.python.jp/2/reference/expressions.html#shifting-operation

シフト演算 | Python 3 documentation
http://docs.python.jp/3/reference/expressions.html#shifting-operations

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク