5 ответов:
Тильды (
~) выполняет побитовое дополнение числового значения в Java.посмотреть: побитовое дополнение (
~): инвертирует единицы и нули в число
Это унарное ~ побитовое дополнение оператор (цитата):
- используется только с целочисленными значениями
- инвертирует биты т. е. 0-бит становится 1-бит и наоборот
- во всех случаях ~x равно (- x) -1
см. также эта страница О побитовых операторах в Википедии, в которой говорится :
побитовое Не, или дополнение, является a унарная операция, выполняющая логические операции отрицание на каждом бите, формируя дополнение единиц данного двоичного кода значение. Цифры, которые были 0 становятся 1, и наоборот.
например:NOT 0111 (decimal 7) = 1000 (decimal 8)во многих языках программирования (в том числе в семействе C), побитовым оператором NOT является"
~" (тильда.)
С сайта Java http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
унарный побитовый оператор дополнения " ~ " инвертирует битовый шаблон; он может применяться к любому из интегральных типов, делая каждый " 0 " a " 1" и каждый " 1 "a"0". Например, один байт содержит 8 бит; применение этот оператор для значения, чей битовый шаблон "00000000" изменится ее рисунок "11111111".
сейчас, как и раньше ответ Паскаля Мартина, в любом данном случае vlaue равно- (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(х)= 1(х) + 1 (https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/)
нашей целью является то, чтобы найти х:
1(х)= 2(х) - 1 (на основе предыдущего выражения)как наш ответ в том в 2-х комплимент,
1's (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)
Поэтому x= 1 комплимент ценности (поскольку ответ, который мы получили, представляет собой 1 комплимент x).
x =0000 0000 0000 0011
Итак, мы обнаружили, что x равно 3 и, следовательно, наш предыдущий результат ~ operator1111 1111 1111 1101это -3 написано как комплимент 2 из 3.
как уже было сказано
~является унарным побитовым оператором NOT.
Ваш пример проверяет, является лиmodifiersсодержит биты, отличные от определенных вKeyEvent.SHIFT_MASK.
~KeyEvent.SHIFT_MASK-> все биты, кроме тех, что в KeyEvent.SHIFT_MASK имеют значение 1.(modifiers & ~KeyEvent.SHIFT_MASK)- > каждый 1-бит вmodifiersчто "не принадлежит" кKeyEvent.SHIFT_MASKif ((modifiers & ~KeyEvent.SHIFT_MASK) != 0)-> если бы был хотя бы один другой бит, установленный в 1, кромеKeyEvent.SHIFT_MASKчто-то делать...
из официальных документов http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html:
унарный побитовый оператор дополнения " ~ "инвертирует битовый шаблон; он может быть применен к любому из интегральных типов, делая каждый" 0 "a" 1 "и каждый" 1 "a"0". Например, байт содержит 8 битов; применение этого оператора к значению, чей битовый шаблон "00000000" изменит его шаблон на "11111111".
Comments