조건문을 사용할 때 && 나 || 같은 논리 연산자는 많이 사용하지만
비트 연산자는 비교적 많이 사용하지 않아서
자주 까먹는다. 이번 기회에 한번 정리하며 외우려고 한다.
*비트 연산자
-컴퓨터 내부 정보를 비트 단위로 비교하거나 조작 할 때 사용한다.
알 수 있는 사실은
컴퓨터 내부 정보이니 이진수로 표현 될 것이다.
int a = 5;
int b = 6;
a와b에 비트연산자를 사용하면
5는 101
6은 110
처럼 이진수로 변환되어서 비트연산을 실행할 것이다.
종류에는 네 가지가 있다.
1. 논리곱(and) &
둘 다 1 일때만 1 아닐 땐 0 이다.
5 = 101
6 = 110
& = 100
int a = 5;
int b = 6;
System.out.print(a&b); 4출력
2. 논리합(or) |
둘 중 하나가 1이면 1이다.
5 = 101
6 = 110
| = 111
int a = 5;
int b = 6
System.out.print(a|b); 7출력
3. 배타적 논리합 (xor) ^
한쪽이 1이고 다른 한쪽이 0이면 1이다.
5 = 101
6 = 110
^ = 011
int a = 5;
int b = 6
System.out.print(a^b); 3출력
4 1의 보수 표현(not) ~
다른 종류와는 다르게 비교하는 연산이 아니다.
비트 값을 1의 보수로 바꾼다. 0은 1로 1은 0으로
5 = 101
~5 = 11111010 //부호비트가 1이며 - 이다.
int a = 5;
System.out.print(~a); -6출력
비트연산자인 &는
홀수인지 짝수인지 검사하는 if(N%2 == 1)의 경우에
if(N&1)로 대체할 수 있다.
왜냐면 홀수의 경우엔 2진수로 바꿨을 때 무조건 마지막자리에 1 이있기때문에
&1로 연산을하면 1이 나오게 된다.
예를 들어 3&1인경우엔 이진수로 11(2)
11
1
--- &
1 이 나오게되어 if문이 true가 된다.
쉬프트연산자의 경우엔
int a = 3;
int b = 4;
일때
2진수로 a와 b를 나타내면
a = 11(2)
b = 100 (2)
a>>1는
a의 비트를 오른쪽으로 1칸 만큼 이동 시키란 뜻이다
따라서 a는 =1(2)이 되고
10진수로 나타내도 1이다.
b>>1의 경우엔
b = 10(2)이 되고 10진수로 나타내면 2가 된다.
<<의 경우도 마찬가지로 왼쪽으로 이동시키면 된다.
a << 1 은 110(2)이 되고 10진수로 6이 된다.
따라서 A << B 는 A*2^B와 같다
A >> B의 경우엔 A/2^B와 같다.
또한
(A+B)/2 는 (A+B)>>1 과같다.
'Java' 카테고리의 다른 글
StringBuilder, StringBuffer, System.out.print, append (1) | 2019.07.11 |
---|---|
2차원 배열의 깊은 복사, 임의의 클래스 복사 (0) | 2019.06.13 |
정수와 실수 자료형의 최소값과 최대값 (0) | 2019.05.04 |
ArrayList vs Vector (0) | 2019.04.12 |
자바 n진수 변환 (0) | 2019.04.12 |