をどういう意味:のJava:〜私はこのラインを持って、このJavaソースコードで
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....
チルダ~
は何を意味するのでしょうか?
をどういう意味:のJava:〜私はこのラインを持って、このJavaソースコードで
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....
チルダ~
は何を意味するのでしょうか?
チルド(~
)は、Javaで数値のビット補数を実行します。
参照:公式ドキュメントhttp://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.htmlからBitwise complement (~
): inverts ones and zeroes in a number
それはUnary ~ Bitwise complementオペレータ(引用)ある:
整数も参照してくださいthis page on Bitwise operators on wikipedia、述べている:
ビット単位NOT、または補体は、指定されたバイナリ 値の補数を形成し、各ビットの論理 否定を実行 単項演算です。 0だった数字は1、 になり、逆も同様です。例えば
:
NOT 0111 (decimal 7)
= 1000 (decimal 8)
多くのプログラミング言語(Cファミリーのものを含む) で、ビット単位のNOT演算子は "
~
" (チルダ)です。
:
単項ビット単位の補数演算子 "〜" のビットパターンを反転させ、すべての "0"を "1"に、すべての "1"を "0"にする積分型のいずれにも適用できます。例えば、1バイトは8ビットを含む。この演算子をビットパターンが "00000000"の値に適用すると、そのパターンは "11111111"に変更されます。
前述のように、は単項ビットNOT演算子です。
modifiers
にKeyEvent.SHIFT_MASK
で定義されている以外のビットが含まれているかどうかをテストします。
~KeyEvent.SHIFT_MASK
- もしそこ>からKeyEvent.SHIFT_MASK
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0)
に "属さない" というmodifiers
内のすべての1ビット>から> KeyEvent.SHIFT_MASKのものを除くすべてのビットが1(modifiers & ~KeyEvent.SHIFT_MASK)
に設定されていますKeyEvent.SHIFT_MASK
の他に少なくとも1つのビットが1に設定されていました...Javaのウェブサイトhttp://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
から単項ビット単位の補数演算子は、 "〜" のビットパターンを反転させ、 は、あらゆる "0"を "1" 、すべての "1"を "0"にする整数型のいずれにも適用できます。例えば、1バイトは8ビットを含む。 この演算子をビットパターンが "00000000"の値に適用すると、 のパターンが "11111111"に変更されます。
これまでのところ、Pascal MARTINが答えたように、任意の場合、vlaueは - (x)-1に等しくなります。例えば。 〜2 = -3、-6〜= 5、等
また、Javaで全て正の整数は、それらのバイナリ表現との正の整数の2の補数の値に保存され負の整数として格納されています。
さて、それはの場合はビットレベルでどのように機能するかを見てみましょう〜2 = -3:
0000 0000 0000 0010
今すぐ〜2になります:
当初、2はそのバイナリ表現に格納されます値(ビットの逆数):
1111 1111 1111 1101
どのように私はそれが-3であると知っていますか? まあ、我々は2の(X)を知っているように、それは3
の2の補数表現に由来しているので、それは-3である= 1の(X)+ 1(https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/)
私たちの目的は、それを見つけるために、Xです:
1の(x)の2の(X)= - 私たちの答えはであるため1(前の式に基づいて)
を2の補数である、
1の(X)= 1111 1111 1111 1101 - 0000 0000 0000 0001
1の(X)= 1111 1111 1111 1100
(引く方法 - http://sandbox.mc.edu/~bennet/cs110/pm/sub.html)
したがってx = 1は値の補数です(私たちが得た答えは1のxの補数を表しています)。
x = 0000 0000 0000 0011
xが3であることから、私たちの以前の結果〜演算子1111 1111 1111 1101
は-3の2の補数として書かれています。