ビット演算子 2015/03/01
ビット演算子を各プログラミング言語で比較。
ビット演算子のオペランドは整数に限られるが、論理型でも同じ演算子が使えるものもある。
Go言語 (golang) 2015/03/01
&- ビット積(AND)。オペランドは整数に限られ、
boolでは使えない。 |- ビット和(OR)。オペランドは整数に限られ、
boolでは使えない。 ^- ビットごとの否定(NOT)。符号は反転される。オペランドは整数に限られ、
boolでは使えない。 &^- ビットクリア(AND NOT)。オペランドは整数に限られ、
boolでは使えない。 <<- 左シフト(整数を2倍)。符号ビットは左端で消えるので符号は保存されない。
>>- 右シフト(整数を2分の1)。左オペランドが符号ありの場合は、左端は符号ビットで埋められるので符号は保存される。 左オペランドが符号なしの場合は、左端は0で埋められる。
Java 2017/07/24
&- ビット積(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 << b は a << (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 2014/04/12
&- ビット積(AND)
|- ビット和(OR)
^- ビットごとの排他的論理和(XOR)
~- ビットごとの否定(NOT)
<<- 左シフト(整数を2倍)。符号ビットは左端で消えるので符号は保存されない。
>>- 右シフト(整数を2分の1)。左端は符号ビットで埋められるので符号は保存される。
ビット演算子 | PHP Manual
http://php.net/manual/ja/language.operators.bitwise.php
Python 2014/07/31
&- ビット積(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