산술 시프트란 | 비트 시프트와 산술 시프트의 차이 | 시프트 예시
2024. 5. 13. 22:12ㆍ기초지식
반응형
- 비트 시프트 (Bit Shift)
- 각 비트를 지정된 수만큼 이동시키는 연산.
- 왼쪽 시프트와 오른쪽 시프트가 있으며, 각각 비트를 왼쪽 또는 오른쪽으로 이동시킵니다.
- 비트 시프트는 빈 자리에 0을 채우고, 이동된 비트를 버리는 등의 간단한 논리적 이동을 수행합니다.
# 비트 시프트 연산 예시
x = 10 # 이진수 표현: 1010
# 왼쪽 시프트: 각 비트를 왼쪽으로 2번 이동
left_shifted = x << 2 # 결과: 101000 (40)
print("Left Shifted:", left_shifted)
# 오른쪽 시프트: 각 비트를 오른쪽으로 2번 이동
right_shifted = x >> 2 # 결과: 10 (2)
print("Right Shifted:", right_shifted)
- 산술 시프트(arithmetic shift)
- 산술 시프트는 비트 시프트의 한 형태로, 주로 부호 있는 정수에 사용.
- 주로 정수형 데이터의 곱셈이나 나눗셈 연산을 대체하는 데 사용 (특히 곱셈은 왼쪽 산술 시프트로 대체할 수 있으며, 나눗셈은 오른쪽 산술 시프트로 대체 가능)
- 연산 속도가 빠르기 때문에 효율적인 프로그래밍에 사용
- 오른쪽 산술 시프트 (Arithmetic Right Shift)
- 오른쪽으로 시프트하는 동안 맨 왼쪽 비트(부호 비트)를 유지하면서 나머지 비트들을 이동.
- 양수의 경우, 산술 오른쪽 시프트는 일반적인 오른쪽 시프트와 동일한 결과를 나타냅니다.
- 음수의 경우, 산술 오른쪽 시프트는 새로운 비트를 부호 비트로 채우기 때문에 부호를 유지하면서 나누기 연산을 수행하는 효과가 있습니다.
- 왼쪽 산술 시프트 (Arithmetic Left Shift):
- 왼쪽으로 시프트하는 동안 맨 오른쪽 비트를 유지하면서 나머지 비트들을 이동.
- 산술 왼쪽 시프트는 보통 입력 수를 2의 거듭제곱만큼 곱하는 것과 같은 효과를 가짐.
y = -10 # 이진수 표현: 11110110 (부호 비트가 1인 음수)
# 오른쪽 산술 시프트: 부호 비트를 유지하면서 각 비트를 오른쪽으로 2번 이동
arithmetic_right_shifted = y >> 2 # 결과: 11111101 (-3)
# 왼쪽 산술 시프트: 부호 비트를 유지하면서 각 비트를 왼쪽으로 2번 이동
arithmetic_left_shifted = y << 2 # 결과: 110 (-40)
결국, 산술 시프트는 부호 있는 정수의 연산을 처리하는 데 사용되고, 비트 시프트는 단순히 비트를 이동시키는 데 사용된다. 일반적으로, 비트 시프트는 논리적인 연산에 사용되고, 산술 시프트는 숫자의 부호를 고려해야 하는 경우에 사용된다.
반응형