code

자바 : ~은 무엇을 의미합니까?

codestyles 2020. 11. 1. 18:08
반응형

자바 : ~은 무엇을 의미합니까?


이 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

반응형