Java: co oznacza ~
W tym kodzie źródłowym Javy mam taką linijkę:
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....
Co oznacza tylda? 5 answers
Tylda (~
) wykonuje bitowe uzupełnienie wartości liczbowej w Javie.
Zobacz: dopełniacz bitowy (~
): odwraca jedynki i zera w liczbie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-04 07:36:59
Jest to unary ~ bitowe dopełniacz operator (cytowanie) :
- używane tylko z wartościami całkowitymi
- odwraca bity, tzn. 0-bit staje się 1-bitowym i odwrotnie
- we wszystkich przypadkach ~x równa się (-x)-1
Zobacz także tę stronę o operatorach bitowych na Wikipedii , która stwierdza :
Bitowe Nie, czyli dopełnienie, jest operacja jednolita wykonująca logiczne negacja na każdym bitie, tworząc dopełnienie jednej z dane binarne wartość. Cyfry, które były 0 stały się 1, i vice versa.
na przykład:
NOT 0111 (decimal 7)
= 1000 (decimal 8)
W wielu językach programowania (łącznie z tymi z rodziny C) , operatorem bitowym NOT jest "
~
" tylda).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-28 02:57:29
Ze strony Javy http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
Unary bitowy Operator dopełniacza " ~ " odwraca wzór bitowy; to może być stosowany do dowolnego typu całek, dzięki czemu każde " 0 " a " 1" i każde " 1 " a "0". Na przykład bajt zawiera 8 bitów; zastosowanie operator ten do wartości, której wzorzec bitowy to "00000000" zmieniłby jego wzór na "11111111".
Teraz, jak wcześniej odpowiedział Pascal MARTIN, w w każdym przypadku vlaue jest równe- (x) -1. E. g. ~2=-3, ~-6=5, itd.
Również w Javie wszystkie dodatnie liczby całkowitesą przechowywane jako ich reprezentacje binarne, a ujemne liczby całkowite są przechowywane w wartości komplementarnej 2 dodatniej liczby całkowitej.
Teraz, zobaczmy jak to działa na poziomie bitów w przypadku ~2=-3:
Początkowo, 2 jest przechowywane w swojej binarnej reprezentacji:
0000 0000 0000 0010
Teraz ~2 spowoduje wartość (odwrócenie bitów):
1111 1111 1111 1101
Jak w świat wiem, że jest -3? Cóż, jest -3, ponieważ pochodzi z reprezentacji komplementarnej 2 na 3.
Jak wiemy 2 'S (x)= 1' s (x) + 1 (https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/)
naszym celem jest znalezienie x :
1 's (x)= 2' S (x) - 1 (na podstawie poprzedniego wyrażenia)
Jak nasza odpowiedź jest w komplemencie 2,
1 ' S (x)= 1111 1111 1111 1101 - 0000 0000 0000 0001
1 ' s (x)= 1111 1111 1111 1100
(Jak odjąć - http://sandbox.mc.edu / ~bennet/cs110/pm/sub.html)
Zatem komplement wartości x= 1 (ponieważ otrzymana odpowiedź reprezentuje komplement wartości x).
x = 0000 0000 0000 0011
tak więc, odkryliśmy, że x jest 3 i stąd nasz poprzedni wynik operatora ~ 1111 1111 1111 1101
jest -3 zapisywany jako komplement 2 z 3.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-18 05:30:50
Jak wspomniano wcześniej ~
jest operatorem jednostkowym bitowym NOT.
Twój przykład sprawdza, czy modifiers
zawiera bity inne niż te zdefiniowane w KeyEvent.SHIFT_MASK
.
-
~KeyEvent.SHIFT_MASK
- > wszystkie bity oprócz tych w KeyEvent.SHIFT_MASK są ustawione na 1. -
(modifiers & ~KeyEvent.SHIFT_MASK)
-> Każdy 1-bit wmodifiers
, który "nie należy" doKeyEvent.SHIFT_MASK
-
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0)
- > jeśli był przynajmniej jeden inny bit ustawiony na 1 pozaKeyEvent.SHIFT_MASK
Zrób coś...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-04 07:37:19
Z oficjalnych dokumentów http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html :
Jednoargumentowy Operator dopełniacza " ~ "odwraca wzór bitowy; można go zastosować do dowolnego typu całek, czyniąc każde" 0 " a " 1 "i każde" 1 "A " 0". Na przykład bajt zawiera 8 bitów; zastosowanie tego operatora do wartości, której wzorzec bitowy to "00000000", zmieniłoby jego Wzorzec na"11111111".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-27 12:42:07