drexqq

[Java, 자바] 연산자 - 비트연산자 본문

Back-End/Java

[Java, 자바] 연산자 - 비트연산자

drexqq 2020. 5. 20. 19:56
728x90
반응형

Java의 비트 연산자에 대해 알아보자.

 

비트 연산자는 말 그대로 비트 연산을 위한 연산자이다.

비트 연산 : 비트 연산은 한 개 혹은 두 개의 이진수에 대해 비트 단위로 적용되는 연산.

 

이진수에 대해 계산이 필요할 때 사용하면 될 것 같다.

 

비트 연산자는 &, |, ^, <<, >>, ~ 총 6종류가 있다.

 

전 게시글에 있는 논리 연산자와 비슷하게 생긴 것도 있고 그렇지 않은 것도 있다. 논리 연산자 보기

 

&(AND)

반갑게도 논리 연산자와 같다.
&&(AND)는 비교되는 두 값이 true일 때만 true값을 반환한다.

(0 & 0) -> 0
(1 & 0) -> 0
(0 & 1) -> 0
(1 & 1) -> 1

 

|(OR)

이 녀석도 같다.

||(OR)는 비교되는 두 값이 중 하나만 true여도 true값을 반환한다.

(0 | 0) -> 0
(1 | 0) -> 1
(0 | 1) -> 1
(1 | 1) -> 1

 

^(XOR)

처음 보는 녀석이 나왔다.

^(XOR)은 비교되는 두 값이 다를 때만 true를 반환한다.
암호화와 복호화에 많이 쓰인다고 한다.

(0 ^ 0) -> 0
(1 ^ 0) -> 1
(0 ^ 1) -> 1
(1 ^ 1) -> 0

 

<<(Left Shift) , >>(Right Shift)

<<(Left Shift)는 말 그대로 값을 왼쪽으로 밀어준다.

>>(Right Shift)는 말그대로 값을 오른쪽으로 밀어준다.

 

나도 처음 듣고 무슨 소린지 몰랐다.

예를 들어서 우리가 흔히 사용하는 아라비아 숫자인 십진수 2이진수로 바꿔 보면


0010                     이러한 형태가 된다

                            그 후 <<를 사용하여 연산하게 되면,
0010 << 1 = 0100   이러한 값이 이렇게 나오게 된다.

 

이런 식으로 계산이 되어서 이진수 0100이 나오게 된다.

 

이진수 0100을 다시 >>를 사용해서 연산해보자

 

0100 >> 2 = 0001;

<<와 반대로 >>를 사용하니 이진수의 값이 오른쪽으로 가는 게 보인다.
이해가 되었다면 좋겠다. 난 됐다.

 

 

~(틸트)

나온 값을 모두 반대로 뒤집어 버린다.

이 녀석도 처음 들었을 때 무슨 소린지 전혀 몰랐다.

 

예를 들어보자

 

십진수 8이진수로 바꾸게 된다면

 

1000 이란 이진수를 얻을 수 있을 것이다. ( 이진수 계산하는 건 나중에 써보도록 하겠다.)

 

여기서 ~ 이 친구가 앞에 붙게 된다면 무슨 일이 벌어질까?

~1000 = 0001


짜잔 이렇게 모든 값들을 뒤집어 버린다.

 

또 다른 예시를 봐도 마찬가지다

 

십진수 15이진수로 바꾸면 1111이 된다.


여기서 ~이 친구가 앞에 붙게 된다면


~1111 = 0000

이렇게 값이 바뀌게 된다.

 

 

728x90
반응형
Comments