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

C 언어 비트 연산자로 2의 곱셈과 나눗셈 구현하기

비트 연산자(Bitwise Operator)는 피연산자의 개별 비트, 즉 이진수 값 단위로 동작하는 연산자입니다. 시프트 연산을 활용하면 곱셈이나 나눗셈 같은 산술 연산을 매우 빠르게 처리할 수 있어 임베디드 프로그래밍이나 성능 최적화에서 자주 사용됩니다.

C 언어의 주요 비트 연산자

연산자설명
&비트 AND
|비트 OR
^비트 XOR
<<왼쪽 시프트(Left Shift)
>>오른쪽 시프트(Right Shift)
~1의 보수(One's Complement)

비트 AND(&) 진리표

두 비트가 모두 1일 때만 결과가 1이 됩니다.

Bitwise AND
aba & b
000
010
100
111

비트 OR(|) 진리표

두 비트 중 하나라도 1이면 결과가 1이 됩니다.

Bitwise OR
aba | b
000
011
101
111

비트 XOR(^) 진리표

두 비트가 서로 다를 때만 결과가 1이 됩니다.

Bitwise XOR
aba ^ b
000
011
101
110

시프트 연산의 핵심 원리

시프트 연산은 비트를 좌우로 이동시키는 연산으로, 다음과 같은 성질을 가집니다.

  • 왼쪽 시프트(a << n): 비트를 n칸 왼쪽으로 이동하며, 값은 2ⁿ배가 됩니다. 즉 a << 1a * 2와 같습니다.
  • 오른쪽 시프트(a >> n): 비트를 n칸 오른쪽으로 이동하며, 값은 2ⁿ으로 나눈 몫이 됩니다. 즉 a >> 1a / 2와 같습니다.

예제 코드

다음은 비트 연산자를 활용하여 2의 곱셈과 나눗셈을 수행하는 C 프로그램입니다.

#include<stdio.h>
main(){
   int a;
   printf("Enter a\n");
   scanf("%d",&a);
   printf("%d*2=%d \n",a,a<<1);
   printf("%d/2=%d \n",a,a>>1);
}

실행 결과

위 프로그램을 실행하면 다음과 같은 출력을 확인할 수 있습니다.

Run 1:
Enter a
45
45*2=90
45/2=22
Run 2:
Enter a
65
65*2=130
65/2=32

결과 분석

입력값 45를 왼쪽으로 1비트 시프트하면 90(=45×2)이 되고, 오른쪽으로 1비트 시프트하면 22(=45÷2의 몫)가 됩니다. 마찬가지로 65를 시프트하면 130과 32가 출력됩니다. 홀수를 오른쪽 시프트할 경우 소수점 이하는 버려지고 몫만 남는 점에 유의하세요.

이처럼 비트 시프트 연산은 곱셈·나눗셈보다 연산 속도가 빠르기 때문에, 2의 거듭제곱 배수 연산이 필요한 경우 효율적인 대안이 될 수 있습니다.