알고리즘/알고리즘 종류
비트 연산
HAN_PY
2020. 5. 12. 16:49
반응형
num1 = 2 -> 0010
num2 = 3 -> 0011
& | AND | num1&num2 | 0010 |
| | OR | num1|num2 | 0011 |
^ | XOR(다를 때 1/같을 때 0) | num1^num2 | 0001 |
~ | not 연산자 | ~num1 | 1101 |
<< | 왼쪽이동 | num1<<2 | 1000 |
>> | 오른쪽이동 | num1>>2 | 0000 |
- 범위를 벗어나면 없어진다고 생각하자.(시스템에 따라 다르게 처리. 앞으로 돌아가진 않음)
- 내부적으로 비트로 연산을 하고 결과는 정수로 보여준다.
자주 사용하는 모음
N&1
- 양의 정수의 짝수 홀수 판별
- N%2(나머지 연산) 보다 효율이 좋다
- 연산 후에 마지막을 비트 값이 1인지 0인지로 판단한다.
1<<n
- 2^n 값이다. 2^n을 계산하는 것 보다 성능이 좋다
- power set(모든부분집합)인 공집합과 자기 자신을 포함한 모든 부분집합을 구할 때 사용한다.
i & (1 << j) / (i << j) & 1
- 어떤 숫자 i가 있을 때 j번째 비트의 값이 1인지 아닌지 판단.
- 계산 결과는 i의 j 번째 비트가 1인지 아닌지를 의미한다.
Q. 0과 1로 이루어진 1차 배열에서 7개의 byte를 묶어서 10진수로 출력하기
inp = input()
# 풀이 1
for i in range(0, len(inp), 7):
for j in range(i, i+7):
res = res * 2 + int(inp[j])
print(res, end= " ")
# 풀이 2
for i in range(0, len(inp), 7):
cnt = res = 0
j = i
while j < len(inp) and cnt < 7:
res = res * 2 + int(inp[j])
cnt += 1
j += 1
print(res, end= " ")
반응형