JJANG-JOON
article thumbnail
반응형

 

 

 

 

 

 

 

 

 

 

쉬프트 연산

 

쉬프트 연산(Shift Operation)은 비트 단위로 숫자를 이동하는 연산이며 이 연산은 주로 비트 단위 조작이나 수의 배수 증가/감소 등의 용도로 사용된다. 쉬프트 연산은 주어진 수를 이진수로 나타내어 각 비트들을 왼쪽이나 오른쪽으로 이동시키는 작업을 수행한다.

 

두 가지 주요 종류의 쉬프트 연산이 있습니다

  1. 왼쪽 쉬프트 (Left Shift): 주어진 수의 비트들을 왼쪽으로 이동시킨다. 이동하는 동안 새로운 비트가 오른쪽에 추가된다. 왼쪽으로 이동하면 수가 2의 거듭제곱 배로 증가한다.
  2. 오른쪽 쉬프트 (Right Shift): 주어진 수의 비트들을 오른쪽으로 이동시킨다. 이동하는 동안 새로운 비트가 왼쪽에 추가된다. 오른쪽으로 이동하면 수가 2의 거듭제곱으로 나눠지는 효과가 있다.

다음과 같은 상황에 쉬프트 연산이 활용된다.

  • 비트 조작: 특정 비트를 설정하거나 해제할 때 사용됩니다.
  • 수의 배수/나눗셈: 쉬프트 연산을 이용하여 수를 효율적으로 곱하거나 나누는 연산을 수행할 수 있습니다.
  • 데이터 압축: 비트 단위로 데이터를 압축하거나 해제할 때 사용될 수 있습니다.

 

2진수 쉬프트 연산

 

2진수 쉬프트 연산은 비트 단위로 숫자를 이동하는 연산이다. 파이썬에서는 << 연산자를 사용하여 왼쪽 쉬프트(Left Shift) 연산을 수행하며, >> 연산자를 사용하여 오른쪽 쉬프트(Right Shift) 연산을 수행할 수 있다. 이러한 연산은 주로 비트 조작, 수의 배수 증가/감소 등의 용도로 사용된다

 

간단한 2진수 쉬프트 연산 예시를 들어보겠다.

 

왼쪽 쉬프트 (Left Shift) 예시:

num = 10  # 10진수
binary_num = bin(num)  # 10진수를 2진수 문자열로 변환
shifted = num << 2  # 왼쪽으로 2비트 쉬프트

print(f"Original: {binary_num}")
print(f"Shifted: {bin(shifted)}")

출력 결과:

Original: 0b1010
Shifted: 0b101000

 

오른쪽 쉬프트 (Right Shift) 예시:

 

num = 20  # 10진수
binary_num = bin(num)  # 10진수를 2진수 문자열로 변환
shifted = num >> 2  # 오른쪽으로 2비트 쉬프트

print(f"Original: {binary_num}")
print(f"Shifted: {bin(shifted)}")

출력 결과:

Original: 0b10100
Shifted: 0b101

 

 

10진수 쉬프트 연산

 

 

10진수 쉬프트 연산은 주로 정수의 비트 단위 이동을 나타내며, 수의 배수 증가/감소 등에 활용될 수 있다. 여기서는 10진수 쉬프트 연산의 예시를 보겠다.

 

왼쪽 쉬프트 (Left Shift) 예시:

num = 12
shifted = num << 2  # 왼쪽으로 2자리(비트) 쉬프트

print(f"Original: {num}")
print(f"Shifted: {shifted}")

출력 결과:

Original: 12
Shifted: 48

 

위 예시에서는 10진수 12를 왼쪽으로 2자리(비트) 쉬프트하면 결과적으로 48이 된다. 왼쪽으로 쉬프트하는 경우에는 2의 거듭제곱 배수로 값이 증가하게 된다. 원래 값인 12는 2^2 = 4배가 되어 48이 된다.

 

오른쪽 쉬프트 (Right Shift) 예시:

 

num = 32
shifted = num >> 3  # 오른쪽으로 3자리(비트) 쉬프트

print(f"Original: {num}")
print(f"Shifted: {shifted}")

출력 결과:

 

Original: 32
Shifted: 4

 

 

 

 

 

16진수 쉬프트 연산

16진수 쉬프트 연산은 16진수를 비트 단위로 이동하는 연산을 나타냅니다. 16진수 쉬프트 연산은 비트 연산을 통해 이루어지며, 16진수 값을 이진수로 변환한 후 비트 쉬프트를 수행합니다. 여기서는 16진수 쉬프트 연산의 예시를 보여드리겠습니다.

왼쪽 쉬프트 (Left Shift) 예시:

 

 

hex_num = 0x18  # 16진수 0x18 (24)
shifted = hex_num << 2  # 왼쪽으로 2비트 쉬프트

print(f"Original: {hex(hex_num)}")
print(f"Shifted: {hex(shifted)}")

 

출력 결과:

Original: 0x18
Shifted: 0x60

위 예시에서는 16진수 0x18 (십진수로 24)을 왼쪽으로 2비트 쉬프트하면 결과적으로 0x60 (십진수로 96)이 된다. 왼쪽으로 쉬프트하는 경우에는 각 비트들이 왼쪽으로 이동하며, 새로운 비트가 오른쪽에 추가된다.

 

오른쪽 쉬프트 (Right Shift) 예시:

hex_num = 0xE0  # 16진수 0xE0 (224)
shifted = hex_num >> 4  # 오른쪽으로 4비트 쉬프트

print(f"Original: {hex(hex_num)}")
print(f"Shifted: {hex(shifted)}")

 

 

출력 결과 :

Original: 0xe0
Shifted: 0xe

위 예시에서는 16진수 0xE0 (십진수로 224)을 오른쪽으로 4비트 쉬프트하면 결과적으로 0xe (십진수로 15)이 된다. 오른쪽으로 쉬프트하는 경우에는 각 비트들이 오른쪽으로 이동하며, 새로운 비트가 왼쪽에 추가된다.

 

반응형
profile

JJANG-JOON

@JJANG-JOON

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...