Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 시프트 연산 완벽 가이드 – 좌측 시프트, 우측 시프트, 보수 연산

시프트 연산이란?

C 언어의 시프트 연산(shift operation)은 정수 데이터를 비트(bit) 단위로 좌우로 이동시키는 연산입니다. 곱셈과 나눗셈을 매우 빠르게 처리할 수 있어 임베디드 프로그래밍이나 성능 최적화에 널리 활용됩니다. 대표적인 시프트 연산자로는 좌측 시프트(<<)와 우측 시프트(>>)가 있으며, 이와 함께 비트를 반전시키는 보수 연산자(~)도 자주 함께 사용됩니다.

좌측 시프트(<<)

변수의 값을 한 번 좌측 시프트하면 그 값은 2배가 됩니다. 일반적으로 n비트만큼 좌측 시프트하면 원래 값에 2ⁿ을 곱한 결과와 같습니다.

예를 들어 a = 10이라면, a<<1 = 20이 됩니다.

C 언어 시프트 연산 완벽 가이드 – 좌측 시프트, 우측 시프트, 보수 연산

우측 시프트(>>)

변수의 값을 한 번 우측 시프트하면 원래 값의 절반이 됩니다. 마찬가지로 n비트만큼 우측 시프트하면 원래 값을 2ⁿ으로 나눈 결과와 같습니다.

예를 들어 a = 10이라면, a>>1 = 5가 됩니다.

C 언어 시프트 연산 완벽 가이드 – 좌측 시프트, 우측 시프트, 보수 연산

보수 연산(~)

보수 연산자(~)는 수의 모든 비트를 반전시킵니다. 어떤 수 x에 대한 보수는 -(x+1)과 같습니다. 예를 들어 a = 9라면 ~a = -10이 됩니다.

예제 코드

다음은 C 언어로 작성한 시프트 연산 프로그램입니다.

#include <stdio.h>
main() {
    int a = 9;
    printf("Rightshift of a = %d\n", a >> 1);      // 4
    printf("Leftshift of a = %d\n", a << 1);       // 18
    printf("Compliment of a = %d\n", ~a);          // -(9+1)
    printf("Rightshift by 2 of a = %d\n", a >> 2); // 2
    printf("Leftshift by 2 of a = %d\n", a << 2);  // 36
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Rightshift of a = 4
Leftshift of a = 18
Compliment of a = -10
Rightshift by 2 of a = 2
Leftshift by 2 of a = 36

결과 정리

a = 9일 때 각 연산의 결과를 정리하면 다음과 같습니다.

  • a >> 1 : 4 (9 ÷ 2)
  • a << 1 : 18 (9 × 2)
  • ~a : -10 (-(9+1), 비트 반전)
  • a >> 2 : 2 (9 ÷ 4)
  • a << 2 : 36 (9 × 4)

이처럼 시프트 연산은 2의 거듭제곱 배수 곱셈·나눗셈을 간단하고 빠르게 수행할 수 있는 강력한 도구입니다.