비트연산 정리
& 연산자
- 특정 비트를 0으로 만들 수 있음
- 특정 비트가 0인지 1인지 검사하는 용도 (ex. 홀, 짝 확인)
0101
& 0000
-------
0000# 홀짝 확인
a = 2
b = 3
print(a & 1)
print(b & 1)
>> 0
>> 1| 연산자
- 특정 비트를 1로 만드는 데에 활용될 수 있음
0101
& 1111
-------
1111XOR 연산자
- 비트 단위로 비교하는 연산 (같으면 0, 다르면 1)
- 비트 토글(특정 비트를 반전하는 역할)
0101
& 1111
-------
1010# XOR - 반전
# a배열에서 b의 원소를 인덱스 0->1, 1->0 으로 바꾸기
a = [1, 0, 0, 1, 1, 0, 0, 0]
b = [0, 1, 2, 7]
for i in b:
#a[i] ^= 1
a[i] = a[i]^1
# XOR - 비교
a = 113
b = 25
c = 25
print(a^b) # 다르면 0이 아니고,
print(b^c) # 같으면 0shift 연산자 (<<, >>)
- *2 or //2
- 1<<n : 2^n 의 값을 갖는다
- 1<<n은 원소가 n개일 경우의 모든 부분집합의 수 의미
i & (1<<j)
i의 j번째 비트가 1인지 아닌지 확인
for i in range(1<<3):
if i & (1<<2): # 0이 아니면
print(f'{i}의 2번 비트는 1')
else:
print(f'{i}의 2번 비트는 0')
# 다음과 같이 비트연산을 활용할 수도 있음
for i in range(1<<3):
print(f'{i}의 2번 비트는 {(i&(1<<2))>>2}')'Algorithm > 이론' 카테고리의 다른 글
| Merge sort (0) | 2021.10.09 |
|---|---|
| 그리디 (0) | 2021.09.30 |
| 최대공약수 구하기 - 유클리드 호제법 (0) | 2021.09.21 |
| DP(다이나믹 프로그래밍) (0) | 2021.09.07 |
| 검색 알고리즘 (0) | 2021.08.23 |
댓글