비트연산자
public static void main(String[] args) {
//비트 연산자 : 2진수 연산 &(and) , | , ^ , ~(not,보수:complement) ,>>(오른쪽시프트), <<,>>>
int a = 40;
int b = 25;
System.out.println("a & b =" +(a&b)); //and(&) 는 둘다 참(1)이여야 참(1)
System.out.println("a | b = "+(a|b)); //or(|)는 둘중 하나가 참(1) 이여도 참(1)
System.out.println("a^b = "+(a^b)); // ^(Xor)는 서로 값이 달라야 참
System.out.println("~a = "+(~a));//-47이 맞으나 int는 4byte 체계라 불가
System.out.println("a >> 2 :"+(a>>2)); //2번만큼 2씩곱하기 2진수에서 2번 앞으로 옮기기
System.out.println("a << 2 :"+(a<<2)); //2번만큼 2씩나누기 2진수에서 2번 뒤로 당기기
//>>>는 n번만큼 우로 이동하고 나머지는 다 0으로 채우는것
}
}
출력값 아래 부연설명이 더있으니 아래쪽을 더봐보세요
출력값
a & b =8
a | b = 57
a^b = 49
~a = -41 //-47이 맞으나 int는 4byte 체계라 불가
a >> 2 :10
a << 2 :160
비트연산자 부연설명
a&b가 8이 나온이유는
먼저 a=40에서 40을 2진수로 표기하고
b=25에서 25를 2진수를 표기하는것부터 시작하겠다

2진수로 변환해보면 각각 101000과 11001이 되는데

and(&)는 둘다 만족하는경우에만 이니까
둘다 1이 나온값외에 제외하면 2진수로 1000 즉 8이 나오게된다
이것을 이용해 or(|) 를 풀어보면 or는 둘중 하나만 만족해도 참(1) 이니

111001 즉 57이 나옴을 알 수 있다.
이를 적용하여 나머지도 풀어보면된다 (사실안된다)
쉬프트연산자 부연설명
40을 2진수로 바꾸었을때
(아래 그림처럼 숫자를 써넣으면 계산하기편하다)
101000이 되는데
여기서 왼쪽으로 2칸을 이동하게되면
10100000이 되어 160이라는 숫자가 나오게된다
즉 왼쪽으로 한칸 이동할때마다 *2를 하는셈
오른쪽이동은 이와 반대로 생각하면 되고 오른쪽이동은 이동할때마다 /2를 하는셈이 된다