비트 연산자
// 1. 비트 논리 연산자
// 1-1. AND 연산자 (&)
System.out.println("== & ==");
int num1 = 5;
int num2 = 3;
int result = 0;
result = num1 & num2;
System.out.println("result = " + result);
System.out.println(Integer.toBinaryString(num1));
// 2진수로 바꿔주는거, 근데 3자리로 출력됨, 그래서 아래와 같이 수정
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num2)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
// 04의 의미는 4자리수를 출력하는데 %를 넣으면 4자리수를 빈값은 0을 채움
// d는 정수형 문자를 받는 서식문자
// &(앤드)연산이라서 둘 다 1인 곳만 1로 출력됨 (0101+0011=0001)
// 1-2. OR 연산자 (|)
System.out.println("== | ==");
result = num1 | num2;
System.out.println("result = " + result);
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num2)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
// |(오어)연산이라서 둘 중 하나만 1이면 1로 출력됨 (0101+0011=0111)
// 1-3. XOR 연산자 (^)
System.out.println("== ^ ==");
result = num1 ^ num2;
System.out.println("result = " + result);
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num2)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
// ^(엑스오어)연산이라서 두개가 같으면 0, 다르면 1로 출력 (0101+0011=0110)
// 1-4. 반전 연산자 (~)
System.out.println("== ~ ==");
num1 = 5;
result = ~num1;
System.out.println("result = " + result);
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(num1)));
System.out.printf("%s\n", Integer.toBinaryString(result));
// 반전연산자여서 num1의 5의값 0101이 1010으로 바뀌고 앞자리 ..000도 전부...111로 바뀜
//result = -6 / 0101 -> 11111111111111111111111111111010
// 음수가 됨
// 2. 비트 이동 연산자
// 2-1. << 연산자
int numA = 3;
result = numA << 1;
System.out.println("result = " + result);
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(numA)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
// numA = 6
// 0011 <-3
// 0110 <- 좌측으로 한칸씩 이동해서 6이됨
// 2-2. >> 연산자
result = numA >> 1;
System.out.println("result = " + result);
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(numA)));
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(result)));
// numA = 1
// 0011 <-3
// 0001 <- 우측으로 한칸씩 이동해서 1이됨
// %를 넣고 4자리수를 못채우면 맨앞에 0이 들어감
// 2-3. >>> 연산자
numA = -5;
result = numA >> 1;
System.out.printf("%s\n", Integer.toBinaryString(numA));
System.out.printf("%s\n", Integer.toBinaryString(result));
result = numA >>> 1;
System.out.printf("%s\n", Integer.toBinaryString(numA));
System.out.printf("%s\n", Integer.toBinaryString(result));
// 11111111111111111111111111111011
// 11111111111111111111111111111101
// 11111111111111111111111111111011
// 1111111111111111111111111111101 <- 맨 앞 0은 생략됨
}
}