산술 시프트란 | 비트 시프트와 산술 시프트의 차이 | 시프트 예시

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)
    • 산술 시프트는 비트 시프트의 한 형태로, 주로 부호 있는 정수에 사용.
    • 주로 정수형 데이터의 곱셈이나 나눗셈 연산을 대체하는 데 사용 (특히 곱셈은 왼쪽 산술 시프트로 대체할 수 있으며, 나눗셈은 오른쪽 산술 시프트로 대체 가능)
    • 연산 속도가 빠르기 때문에 효율적인 프로그래밍에 사용
  1. 오른쪽 산술 시프트 (Arithmetic Right Shift)
    • 오른쪽으로 시프트하는 동안 맨 왼쪽 비트(부호 비트)를 유지하면서 나머지 비트들을 이동.
    • 양수의 경우, 산술 오른쪽 시프트는 일반적인 오른쪽 시프트와 동일한 결과를 나타냅니다.
    • 음수의 경우, 산술 오른쪽 시프트는 새로운 비트를 부호 비트로 채우기 때문에 부호를 유지하면서 나누기 연산을 수행하는 효과가 있습니다.
  2. 왼쪽 산술 시프트 (Arithmetic Left Shift):
    • 왼쪽으로 시프트하는 동안 맨 오른쪽 비트를 유지하면서 나머지 비트들을 이동.
    • 산술 왼쪽 시프트는 보통 입력 수를 2의 거듭제곱만큼 곱하는 것과 같은 효과를 가짐.
y = -10  # 이진수 표현: 11110110 (부호 비트가 1인 음수)

# 오른쪽 산술 시프트: 부호 비트를 유지하면서 각 비트를 오른쪽으로 2번 이동
arithmetic_right_shifted = y >> 2  # 결과: 11111101 (-3)

# 왼쪽 산술 시프트: 부호 비트를 유지하면서 각 비트를 왼쪽으로 2번 이동
arithmetic_left_shifted = y << 2  # 결과: 110 (-40)

 

 

결국, 산술 시프트는 부호 있는 정수의 연산을 처리하는 데 사용되고, 비트 시프트는 단순히 비트를 이동시키는 데 사용된다. 일반적으로, 비트 시프트는 논리적인 연산에 사용되고, 산술 시프트는 숫자의 부호를 고려해야 하는 경우에 사용된다.

반응형