-비트연산 : 한개 혹은 두개 이진수에서 비트단위로 적용되는 연산
1. AND(&)
- 두 값의 각 자릿수를 비교해, 두 값 모두에 1이 있을 때에만 1을, 나머지 경우에는 0을 계산한다.
: 0100 & 1100 = 0100
2. OR(|)
- 두 값의 각 자릿수를 비교해, 둘 중 하나라도 1이 있다면 1을, 아니면 0을 계산한다.
: 0101 | 0011 = 0111
3. XOR(^)
- 두 값의 각 자릿수를 비교해, 값이 같으면 0, 다르면 1을 계산한다.
: 0001 ^ 1111 = 1110
4. NOT(~)
- 각 자릿수의 값을 반대로 바꾸는 연산이다.
: ~1(0001) = 1110
비트연산의 활용
1. Flag처리 : 비트를 이용하여 상태처리,
4Byte = 32Bit, 32개의 상태 처리 가능
왜 Int형으로 사용하지 않는가? 적은 공간에 정보를 저장하고 빠른속도를 필요할때 사용, 대표적으로 CPU
2. Flag 켜기 : |= 연산자 활용
unsigned char flag = 0; //0000 0000
flag |= 1; //0000 0001
flag |= 2; //0000 0011
flag |= 4; //0000 0111
flag |= 8; //0000 1111
3. Flag 켜져있는지 확인 : & 연산자 활용
if(flag & 1) //1번째 flag가 1인지 확인, 켜져있으면 1 꺼져있으면 0 리턴
if(flag & 2)
if(flag & 4)
...
4. Flag 끄기 : &= ~num
flag &= ~1 // 1번 flag 끄기
-> 1 = 0000 0001
-> ~1 = 1111 1110
-> 1번째 flag가 0이 된상태에서 &연산을 함으로 끄게 된다. 나머지 bit는 변하지 않는다.
5. Flag Toggle : 켜져있으면 키고, 꺼져있으면 끈다. ^= 연산자 활용
unsigned char flag = 7;//0000 0111
flag ^= 2; //두번째 bit를 토글해줘!
-> ^연산자는 값이 같으면 0을, 다르면 1로 만들어주는 비트 연산자이다.
-> 2(0000 0010)을 7(0000 0111)과 비교하면 -> 5(0000 0101)로 만들어준다.
flag ^=2;// 다시 토글 하게 되면,
-> 2(0000 0010) ^ 5(0000 0101) = 7(0000 0111), 다시 켜주게 된다. 즉 켯따 껏다 해준다!
다른 위치의 비트도 마찬가지
flag |= 1 : 0001
*출처/참고
- 비트연산-위키백과
- C언어코딩도장- 비트 연산자로 플래그 처리하기
'Software Development > Algorithm' 카테고리의 다른 글
진약수 구하기 (0) | 2023.03.17 |
---|---|
[DP] 연쇄행렬 최소곱셈 알고리즘 (1) | 2017.05.22 |
[자료구조] 체이닝 해시 테이블(Chaining Hash Table) 구현 -C/C++ (5) | 2017.03.26 |
[자료구조] Queue(큐) 구현하기 (0) | 2017.03.12 |
[자료구조] Stack(스택) 구현하기 (0) | 2017.03.12 |