봐도봐도 기억 안나는 비트 연산자..
비트 너무싫어 하드웨어 싫어 싫어싫어 하다보니 이 지경 까지..
확실히
뽀개놓는다.
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);
}
}
'Deperecated > Software' 카테고리의 다른 글
ELK란? (0) | 2020.01.17 |
---|---|
진수 뽀개기 (0) | 2019.12.15 |
코딩책과 함께 보는 소프트웨어 개념사전 완독 후 정리 - 2 (0) | 2019.12.14 |
코딩책과 함께 보는 소프트웨어 개념사전 완독 후 정리 - 1 (0) | 2019.12.14 |