Deperecated/Software

비트 연산자 뽀개기

누알라리 2019. 12. 19. 18:46

봐도봐도 기억 안나는 비트 연산자..

비트 너무싫어 하드웨어 싫어 싫어싫어 하다보니 이 지경 까지..

확실히

뽀개놓는다.

 

1. 비트 연산이란?

  • 비트단위로 연산을 진행 하는 것.
  • CPU에겐 곱셈과 나눗셈은 매우 부담이 되는 작업이지만, 비트를 이동시키는 연산은 전혀 부담되지 않는다.
  • Flag 처리에 주로 쓰인다. 예를 들어, 4Byte면 Bit가 32개 이므로 32개의 상태 처리가 가능하다.

2. 비트 연산자

비트 연산자 설명 활용
&

비트 단위로 AND 연산을 한다.

둘 다 1이면 1

Flag가 켜져있는지 확인

if(Flag & 1) 1이 켜져있는지

if(Flag & 2)

if(Flag & 4)

if(Flag & 8)

|

비트 단위로 OR 연산을 한다.

하나만 1이면 1

Flag | 1 // 0000 0001

Flag | 2 // 0000 0011

Flag | 4 // 0000 0111

Flag | 8 // 0000 1111

^

비트 단위로 XOR 연산을 한다.

다르면 1

Flag 켜져있으면 끄고,

켜져있으면 큰다,

~

피연산자의 모든 비트를 반전시켜서 얻은 결과를 반환

1이면 0, 0이면 1 반환

 
<<

피연산자의 비트 열을 왼쪽으로 이동

이동에 따른 빈 공간은 0으로 채움

2의 n승으로 곱할 때
>>

피연산자의 비트 열을 오른쪽으로 이동

이동에 따른 빈 공간은 음수의 경우 1, 양수의 경우 0으로 채움

2의 n승으로 나눌 때
>>>

피연산자의 비트 열을 오른쪽으로 이동

이동에 따른 빈 공간은 0으로 채움

 
public class Hyunndy {
			public static void main(String[] args)
			{
				//문제1. 7의 2의 보수는 -7이다. 증명해라!
				int num1 = 7;
				
				int num2 = ~7;
				
				num2+=1;
				
				System.out.println(num2);
				
				
				//문제2. int형 정수 15678의 오른쪽에서 세 번째 비트와 다섯 번째 비트가 각각 어떻게 되는지 확인하여 출력하는 프로그렘을 작성해보자.
				
				int num3 = 15678;
			
				// 맨 끝 비트로 몰아서 1과의 비교(&) 후 무엇인지 알게 한다.
				int num4 = (num3 >> 2) & 1;
				int num5 = (num3 >> 4) & 1;
				
				System.out.println(num4);
				System.out.println(num5);
			}
}