: 비트(0, 1)를 이용하여 연산하는 연산자
==> 비트 연산을 하기 위해서는 십진수를 이진수로 변환하는 과정이 필요함


============================코드============================
int num1 = 10, num2 = 5, result;
// 비트연산을 하기 위해서는 우선적으로 십진수를 이진수로 변환하는 작업이 필요
// num1 = 1010, num2 = 0101
// and 연산
result = num1 & num2; // 1010 & 0101 ==> 0000
System.out.println("and result >>> " + result); // 0
System.out.println();
// or 연산
result = num1 | num2; // 1010 | 0101 ==> 1111
System.out.println("or result >>> " + result); // 15 -> 2^3 + 2^2 + 2^1 + 1
System.out.println();
// xor 연산
result = num1 ^ num2; // 1010 ^ 0101 ==> 1111
System.out.println("xor result >>> " + result); // 15
System.out.println();

비트를 대상으로 왼쪽 / 오른쪽으로 비트를 밀어서 연산을 수행하는 연산자
왼쪽 쉬프트 ( << ) : 왼쪽으로 비트수만큼 이동하는 연산자 / 오른쪽에 비어 있는 빈 칸(비트)는 0으로 채워짐
부호 있는 오른쪽 쉬프트 ( >> ) : 오른쪽으로 비트 수만큼 이동하는 연산자 / 왼쪽에 비어있는 빈 칸(비트)은 부호비트로 채워짐
부호 없는 오른쪽 쉬프트 ( >>> ) : 오른쪽으로 비트 수만큼 이동하는 연산자 / 왼쪽에 비어 있는 빈칸(비트)은 무조건 0으로 채워짐
부호비트 : 양수( 0 ), 음수 ( 1 )
============================코드============================
int num1 = 10, num2 = 5;
// 비트가 이동이 되기 때문에 십진수를 이진수로 변환하는 것이 필요
// num1 = 1010, num2 = 0101;
// 왼쪽 쉬프트(<<)
System.out.println("왼쪽 쉬프트 >>> " + (num1 << 2)); // 101000 -> 2^5 + 2^3 --> 40
// 오른쪽 쉬프트(>>)
System.out.println("오른쪽 쉬프트 >>> " + (num1 >> 1)); // 0101 양수인 경우에는 1, 음수인 경우에는 0 --> 5
System.out.println("오른쪽 쉬프트 >>> " + (num2 >> 1)); // 0010 --> 2
