자바 : ~은 무엇을 의미합니까?
이 Java 소스 코드에는 다음 줄이 있습니다.
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0) ....
물결표 ~
는 무엇을 의미합니까?
물결표 ( ~
)는 Java에서 숫자 값의 비트 단위 보완을 수행합니다.
참조 : 비트 보수 ( ~
) : 숫자에서 1과 0을 반전합니다.
그것은이다 단항 ~ 비트 보수 연산자 (인용) :
- 정수 값에만 사용
- 비트를 반전합니다. 즉 0 비트는 1 비트가되고 그 반대의 경우도 마찬가지입니다.
- 모든 경우에 ~ x는 (-x) -1과 같습니다.
wikipedia의 Bitwise 연산자에 대한이 페이지를 참조하십시오 .
비트 NOT 또는 보수는 각 비트에 대해 논리 부정을 수행하는 단항 연산으로, 주어진 이진 값의 1의 보수를 형성합니다. 0이었던 숫자는 1이되고 그 반대의 경우도 마찬가지입니다.
예를 들면 :
NOT 0111 (decimal 7)
= 1000 (decimal 8)
많은 프로그래밍 언어 (C 제품군 포함) 에서 비트 NOT 연산자는 "
~
"(물결표)입니다.
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에서 모든 양의 정수 는 이진 표현 으로 저장 되고 음의 정수 는 양의 정수의 2의 칭찬 값에 저장됩니다.
이제 ~ 2 = -3의 경우 비트 수준에서 어떻게 작동하는지 살펴 보겠습니다.
처음에 2는 이진 표현으로 저장됩니다.
0000 0000 0000 0010
이제 ~ 2는 값 (비트 반전)이됩니다.
1111 1111 1111 1101
-3이라는 것을 어떻게 알 수 있습니까? 음, 2의 3의 칭찬 표현에서 파생 되었기 때문에 -3입니다.
우리가 알고 있듯이 2 's (x) = 1 's (x) + 1 ( https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/ )
우리의 목표 x :
1 's (x) = 2 's (x)-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 가치의 칭찬 (우리가 얻은 대답은 x에 대한 1의 칭찬을 나타냄).
x = 0000 0000 0000 0011
그래서 우리는 x가 3이고 따라서 우리의 이전 결과 ~ 연산자 1111 1111 1111 1101
는 -3이 2의 3의 칭찬으로 쓰여졌습니다.
앞서 말했듯 ~
이 단항 비트 NOT 연산자입니다.
귀하의 예제는에 modifiers
정의 된 것 이외의 비트가 포함되어 있는지 여부를 테스트합니다 KeyEvent.SHIFT_MASK
.
~KeyEvent.SHIFT_MASK
-> KeyEvent.SHIFT_MASK를 제외한 모든 비트는 1로 설정됩니다.(modifiers & ~KeyEvent.SHIFT_MASK)
->modifiers
"속하지 않는" 모든 1 비트KeyEvent.SHIFT_MASK
if ((modifiers & ~KeyEvent.SHIFT_MASK) != 0)
->KeyEvent.SHIFT_MASK
무언가를하는 것 외에 적어도 하나의 다른 비트가 1로 설정된 경우 ...
공식 문서 http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html에서 :
단항 비트 보수 연산자 "~"는 비트 패턴을 반전시킵니다. 모든 "0"을 "1"로 만들고 모든 "1"을 "0"으로 만드는 모든 정수 유형에 적용 할 수 있습니다. 예를 들어, 바이트는 8 비트를 포함합니다. 이 연산자를 비트 패턴이 "00000000"인 값에 적용하면 패턴이 "11111111"로 변경됩니다.
참고 URL : https://stackoverflow.com/questions/1483504/java-what-does-mean
'code' 카테고리의 다른 글
Webpack의 로더 순서는 무엇입니까? (0) | 2020.11.01 |
---|---|
버퍼링 된 IO와 버퍼링되지 않은 IO (0) | 2020.11.01 |
Selenium에서 JavaScript 오류 캡처 (0) | 2020.11.01 |
Android는 TableLayout에서 열을 균등하게 늘립니다. (0) | 2020.10.31 |
필드가 null인지 비어 있는지 확인하는 방법 mysql? (0) | 2020.10.31 |