쉬프트 연산(Shift Operation)은 비트 단위로 숫자를 이동하는 연산이며 이 연산은 주로 비트 단위 조작이나 수의 배수 증가/감소 등의 용도로 사용된다. 쉬프트 연산은 주어진 수를 이진수로 나타내어 각 비트들을 왼쪽이나 오른쪽으로 이동시키는 작업을 수행한다.
두 가지 주요 종류의 쉬프트 연산이 있습니다
다음과 같은 상황에 쉬프트 연산이 활용된다.
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진수 쉬프트 연산의 예시를 보겠다.
왼쪽 쉬프트 (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진수 쉬프트 연산의 예시를 보여드리겠습니다.
왼쪽 쉬프트 (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)이 된다. 오른쪽으로 쉬프트하는 경우에는 각 비트들이 오른쪽으로 이동하며, 새로운 비트가 왼쪽에 추가된다.
[C /C++] 큰 숫자, 여러 줄의 문자열, 공백 처리 , 스트링 입출력 (3) | 2024.10.25 |
---|---|
[Effective C++ 3판] Chapter 4. 설계 및 선언 (항목 18~25) (0) | 2023.02.07 |
[Effective C++ 3판] Chapter 3. 자원 관리 (항목 13~17) (0) | 2023.02.07 |
[Effective C++ 3판] Chapter 2. 생성자, 소멸자 및 대입 연산자 (항목 5~12) (0) | 2023.02.07 |
[Effective C++ 3판] Chapter 1. C++에 왔으면 C++의 법을 따릅시다. (항목 1~4) (0) | 2023.02.07 |