web-dev-qa-db-ja.com

Java:〜の意味

このJavaソースコードには次の行があります。

if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....

チルダ~意味?

70

ティルド(~)Javaで数値のビット単位の補数を実行します。

参照: ビット単位の補数(~):数字の1と0を反転します

65
Richard

単項〜ビット単位の補数 演算子(引用)

  • 整数値でのみ使用
  • ビットを反転します。つまり、0ビットは1ビットになり、逆も同様です。
  • すべての場合で〜xは(-x)-1に等しい

ウィキペディアのビット単位演算子に関するこのページ も参照してください。

ビット単位のNOT(補数)は、各ビットの論理否定を実行する単項演算であり、指定されたバイナリ値の1の補数を形成します。 0だった数字は1になり、その逆も同様です。
例えば:

NOT 0111  (decimal 7)
  = 1000  (decimal 8)

多くのプログラミング言語(Cファミリーの言語を含む)では、ビット単位のNOT演算子は "~ "(チルダ)。

50
Pascal MARTIN

Javaのウェブサイトから http://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/op3.html

単項ビット単位の補数演算子「〜」は、ビットパターンを反転します。すべての整数型に適用でき、すべての「0」を「1」、すべての「1」を「0」にします。たとえば、バイトには8ビットが含まれます。この演算子をビットパターンが「00000000」の値に適用すると、そのパターンは「11111111」に変更されます。

さて、以前Pascal MARTINが答えたように、どのような場合でも、vlaueは-(x)-1に等しくなります。例えば。 〜2 = -3、〜-6 = 5など.

また、Java all正整数はバイナリ表現として保存され、負の整数は、正の整数の2の補数値に格納されます。

〜2 = -3の場合のビットレベルでの動作を見てみましょう。

最初、2はそのバイナリ表現で保存されます。

0000 0000 0000 0010

これで〜2は値になります(ビットを反転):

1111 1111 1111 1101

私はそれが-3であることを世界でどのように知っていますか?それは、3の2の補数表現から派生しているため、-3です。

知っているように2's(x)= 1's(x)+ 1( https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and- 2の補数/
私たちの目的は、xを見つけることです。
1's(x)= 2's(x)-1(前の式に基づいて)

答えは2の賛辞であるため、
1's(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 1101is -3は、2の3の補数として記述されます。

10
Dhwaneel

前に述べたように、~は単項ビット単位のNOT演算子です。
この例では、modifiersKeyEvent.SHIFT_MASKで定義されている以外のビットが含まれているかどうかをテストします。

  • ~KeyEvent.SHIFT_MASK-> KeyEvent.SHIFT_MASKのビットを除くすべてのビットが1に設定されます。
  • (modifiers & ~KeyEvent.SHIFT_MASK)-> KeyEvent.SHIFT_MASKに「属さない」modifiersの1ビットごと
  • if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0)-> KeyEvent.SHIFT_MASK以外に少なくとも1つのビットが1に設定されていた場合...
8
VolkerK

公式ドキュメントから http://Java.Sun.com/docs/books/tutorial/Java/nutsandbolts/op3.html

単項ビット単位の補数演算子「〜」は、ビットパターンを反転します。すべての整数型に適用でき、すべての「0」を「1」、すべての「1」を「0」にします。たとえば、バイトには8ビットが含まれます。この演算子をビットパターンが「00000000」の値に適用すると、そのパターンは「11111111」に変更されます。

3