Java: что означает ~

В этом исходном коде Java у меня есть эта строка:

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

Что означает тильда?

5 Solutions collect form web for “Java: что означает ~”

Тильда ( ~ ) выполняет побитовое дополнение численного значения в Java.

См .: Побитовое дополнение ( ~ ): инвертирует и нули в числе

Это оператор Унарного побитового дополнения (цитирование) :

  • используется только с целыми значениями
  • инвертирует биты, то есть 0-бит становится 1-битным и наоборот
  • во всех случаях ~ x равно (-x) -1

См. Также эту страницу по Побитовые операторы в Википедии , в которой говорится:

Побитовое NOT или дополнение – это унарная операция, которая выполняет логическое отрицание для каждого бита, формируя дополнение к данному двоичному значению. Цифры, которые были 0, становятся 1, и наоборот.
Например:

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

Во многих языках программирования (в том числе в семействе C) побитовым оператором NOT является « ~ » (тильда).

Как уже говорилось, ~ является унарным поразрядным оператором NOT.
В вашем примере проверяется, содержат ли modifiers биты, отличные от тех, которые определены в KeyEvent.SHIFT_MASK .

  • ~KeyEvent.SHIFT_MASK -> все биты, кроме тех, что указаны в KeyEvent.SHIFT_MASK, равны 1.
  • (modifiers & ~KeyEvent.SHIFT_MASK) -> каждый 1-бит в modifiers которые «не принадлежат» KeyEvent.SHIFT_MASK
  • if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) -> если хотя бы один бит был установлен в 1, кроме KeyEvent.SHIFT_MASK сделайте что-нибудь …

С веб-сайта Java http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

Унарный побитовый оператор дополнения ~ ~ инвертирует бит-шаблон; он может применяться к любому из интегральных типов, делая каждый «0» a «1» и каждый «1» a «0». Например, байт содержит 8 бит; применяя этот оператор к значению, бит-бит которого «00000000» изменит его шаблон на «11111111».

Теперь, как ранее ответил Паскаль МАРТИН, в любом случае значение равно – (x) -1. Например, ~ 2 = -3, ~ -6 = 5 и т. Д.

Кроме того, в java все положительные целые числа сохраняются как их двоичные представления, а отрицательные целые числа хранятся в значении комплимента 2 положительного целого числа.

Теперь давайте посмотрим, как он работает на уровне бит в случае ~ 2 = -3:

Первоначально 2 хранится в двоичном представлении:

 0000 0000 0000 0010 

Теперь ~ 2 приведет к значению (инвертирует биты):

 1111 1111 1111 1101 

Как в мире я знаю, что это -3? Ну, это -3, потому что это происходит из представления комплимента 2 из 3.

Поскольку мы знаем 2 (x) = 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’s (x) = 1111 1111 1111 1100 (Как вычесть – http://sandbox.mc.edu/~bennet/cs110/pm/sub.html )

Поэтому х = 1 комплимент значения (поскольку полученный нами ответ представляет собой комплимент х х).
x = 0000 0000 0000 0011
Итак, мы обнаружили, что x равно 3 и, следовательно, наш предыдущий результат оператора ~ 1111 1111 1111 1101 -3 написан как комплимент 2 из 3.

Из официальных документов http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html :

Унарный побитовый оператор дополнения ~ ~ инвертирует бит-шаблон; он может применяться к любому из интегральных типов, делая каждый «0» a «1» и каждый «1» a «0». Например, байт содержит 8 бит; применяя этот оператор к значению, бит-бит которого «00000000» изменит его шаблон на «11111111».

Давайте будем гением компьютера.