■ 비트 연산자(bitwise operator)
비트 연산자는 논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자입니다.
또한, 비트 단위로 왼쪽이나 오른쪽으로 전체 비트를 이동하거나, 1의 보수를 만들 때도 사용됩니다.
package main;
public class mainClass {
public static void main(String[] args) {
// bit Operator
// 고급 연산자라고 생각하면 좋다
// 연구개발, 리서치 부분에선 중요한 부분이다
// 처리 속도 및 연산 속도가 빠르다
// 기술 면접에서 많이 나왔던 부분
/*
bit : 0, 1
& AND
| OR
^ XOR *** -> 보안쪽에서 자주 사용되는 연산, 두 값의 각 자릿수를 비교해,값이 0으로 같으면 0, 값이 1로 같으면 0, 다르면 1을 계산한다.
<< left shift *
>> right shift
~ 반전
(1) 1010 1100
A C
1111 0000
F 0 => 1로 채워져 있으면 볼 것도 없이 F이다. = 15(10진수) = 1111(2진수)
(2) 1010 0000
A 0
*/
// AND
int result;
result = 0xAC & 0xF0;
System.out.println("result = " + result); // 출력은 10진수로 바뀌어서 될 것임 => (1)
System.out.printf("0x%x\n", result); // (2)
// OR
result = 0x48 | 0xB4;
System.out.println("result = " + result);
System.out.printf("0x%x\n", result);
// XOR c4 78
result = 0xC4 ^ 0x78;
System.out.println("result = " + result);
System.out.printf("0x%x\n", result);
// 반전 (~, 틸드) 0 -> 1 , 1 -> 0 NOT , 자료형 byte를 사용해야 잘 잡을 수 있다
byte by = ~0x55; // 0101 0101 -> 1010 1010
// A A
System.out.printf("0x%x \n", by);
////////////////////////////////////////////////////////
// left shift (*2) ==> 시프트 연산이 빠르다
/*
0000 0001 -> 1
0000 0010 -> 2
0000 0100 -> 4
8421 8421 (한 칸씩 밀면서 x2가 되는 것을 볼 수 있다, right는 /2로 반대로 된다)
*/
byte by1;
by1 = 0x1 << 1; // (0001을 시프트 연산으로 1만 민다)
System.out.println("by1 =" + by1);
by1 <<= 1; // 0010
System.out.println("by1 =" + by1);
by1 <<= 1; // 0100
System.out.println("by1 =" + by1);
// right shift (/2)
by1 >>= 1; //
System.out.println("by1 =" + by1);
// 예전에 나왔던 기술문제
// num1 = 0x12;
// num2 = 0x34;
// number = ~(num1 & ~num2)
result = ~(0x12 & 0x34);
System.out.println("result = " + result);
System.out.printf("0x%x\n", result);
// 다시 해보기
}
}
'개발 > JAVA' 카테고리의 다른 글
[JAVA] #02. [SQL] StringBuffer, StringBuilder, String 의 차이점 (0) | 2020.07.29 |
---|---|
[JAVA] #10. 자동 형변환 / 강제 형변환 (CAST) (0) | 2020.07.28 |
[JAVA] #08. 자료형(Java Data Type) :: boolean, int, char, double 등 (0) | 2020.07.28 |
[JAVA] #07. 논리 연산자 & 삼항 연산자 (0) | 2020.07.28 |
[JSP] #03. MVC model 1과 model 2 같은 코드로 비교(CustUser) (2) (0) | 2020.07.23 |