티스토리 뷰

728x90

비트 이동(Shift) 연산은 숫자의 이진수 표현에서 비트(0과 1)를 왼쪽 또는 오른쪽으로 이동시키는 연산입니다. 비트 이동 연산은 왼쪽 시프트(<<)오른쪽 시프트(>>) 두 가지로 나뉘며, 각각의 연산에 따라 숫자의 값이 변경됩니다. 이 연산은 매우 빠르고 효율적이기 때문에 컴퓨터 프로그래밍에서 자주 사용됩니다.

1. 왼쪽 시프트 (<<) 연산자

  • 표기법: num << n
  • 설명: num의 비트들을 왼쪽으로 n비트만큼 이동시킵니다.
  • 예상 결과: 왼쪽으로 이동된 비트만큼 값이 2의 n승만큼 곱해집니다. (즉, 값이 커집니다.)
  • 빈 공간: 오른쪽에 생긴 빈 공간은 0으로 채워집니다.

예시

int num = 5;  // 이진수: 0000 0101
int result = num << 1; // 왼쪽으로 1비트 이동
  • 이진수 변환:
    • 5의 이진수: 0000 0101
    • 왼쪽으로 1비트 이동: 0000 1010 (10진수로 10)
  • 결과: 5 << 1의 결과는 10이 됩니다.
int num = 3;  // 이진수: 0000 0011
int result = num << 2; // 왼쪽으로 2비트 이동
  • 이진수 변환:
    • 3의 이진수: 0000 0011
    • 왼쪽으로 2비트 이동: 0000 1100 (10진수로 12)
  • 결과: 3 << 2의 결과는 12가 됩니다.

특징

  • 왼쪽으로 n비트 이동하면 값이 2^n만큼 곱해지는 효과가 있습니다.
  • 예를 들어, num << 3은 num * 2^3과 동일합니다.

2. 오른쪽 시프트 (>>) 연산자

  • 표기법: num >> n
  • 설명: num의 비트들을 오른쪽으로 n비트만큼 이동시킵니다.
  • 예상 결과: 오른쪽으로 이동된 비트만큼 값이 2의 n승만큼 나누어집니다. (즉, 값이 작아집니다.)
  • 빈 공간:
    • 부호가 있는 정수(일반적인 경우): 왼쪽에 생긴 빈 공간은 부호 비트(가장 왼쪽 비트, 0이면 양수, 1이면 음수)로 채워집니다. 이를 산술 시프트라고 합니다.
    • 부호가 없는 정수: 왼쪽에 생긴 빈 공간은 0으로 채워집니다. 이를 논리 시프트라고 합니다.

예시

int num = 8;  // 이진수: 0000 1000
int result = num >> 1; // 오른쪽으로 1비트 이동
  • 이진수 변환:
    • 8의 이진수: 0000 1000
    • 오른쪽으로 1비트 이동: 0000 0100 (10진수로 4)
  • 결과: 8 >> 1의 결과는 4가 됩니다.
int num = 13;  // 이진수: 0000 1101
int result = num >> 2; // 오른쪽으로 2비트 이동
  • 이진수 변환:
    • 13의 이진수: 0000 1101
    • 오른쪽으로 2비트 이동: 0000 0011 (10진수로 3)
  • 결과: 13 >> 2의 결과는 3이 됩니다.

특징

  • 오른쪽으로 n비트 이동하면 값이 2^n만큼 나누어지는 효과가 있습니다.
  • 예를 들어, num >> 2는 num / 2^2와 동일합니다.

3. 요약

  • num << n (왼쪽 시프트): 비트들을 왼쪽으로 n비트 이동시킵니다. 값은 2^n만큼 커집니다. 오른쪽에 생긴 빈 자리는 0으로 채웁니다.
  • num >> n (오른쪽 시프트): 비트들을 오른쪽으로 n비트 이동시킵니다. 값은 2^n만큼 작아집니다. 왼쪽에 생긴 빈 자리는 부호 비트로 채우거나, 0으로 채웁니다.

비트 이동 연산은 고속의 수학 연산이나 비트 조작이 필요한 경우에 매우 유용합니다. 예를 들어, 곱셈과 나눗셈을 빠르게 수행하거나, 데이터의 특정 비트를 추출할 때 사용됩니다.

728x90

'Study > 정보처리기사' 카테고리의 다른 글

동적 바인딩(Dynamic Binding)이란?  (0) 2024.10.08
포인터(Pointer)란?  (0) 2024.10.08
추상 팩토리(Abstract Factory) 패턴이란?  (0) 2024.10.07
공격 기법 관련 문제  (0) 2024.10.07
악성 프로그램 관련 문제  (0) 2024.10.07