비트 연산자를 사용하면 곱셈 연산 없이도 숫자에 2를 곱할 수 있습니다. 핵심은 왼쪽 시프트 연산자(<<)입니다. 숫자의 비트를 왼쪽으로 한 칸 이동시키면 그 값은 원래 값의 두 배가 됩니다.
그 이유는 이진수에서 각 비트가 2의 거듭제곱을 나타내기 때문입니다. 예를 들어 25는 이진수로 11001인데, 비트를 왼쪽으로 한 칸 밀면 110010, 즉 십진수 50이 됩니다.
예제 코드
using System;
namespace BitwiseDemo {
class Example {
static void Main(string[] args) {
int num = 25, result;
result = num << 1;
Console.WriteLine("원래 숫자: {0}", num);
Console.WriteLine("2를 곱한 숫자: {0}", result);
}
}
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
원래 숫자: 25 2를 곱한 숫자: 50
코드 설명
이제 위 프로그램의 동작 과정을 살펴보겠습니다.
먼저 정수형 변수 num에 25를 저장합니다. 그다음 왼쪽 시프트 연산자(<<)를 사용하여 num의 모든 비트를 왼쪽으로 1비트 이동시킵니다. 비트가 한 칸 이동되면 값이 두 배가 되며, 이 결과가 result 변수에 저장됩니다. 마지막으로 Console.WriteLine() 메서드를 통해 원래 숫자와 연산 결과를 화면에 출력합니다. 해당 코드 스니펫은 다음과 같습니다.
int num = 25, result;
result = num << 1;
Console.WriteLine("원래 숫자: {0}", num);
Console.WriteLine("2를 곱한 숫자: {0}", result);참고 사항
왼쪽 시프트 연산자를 사용할 때는 오버플로우에 주의해야 합니다. C#의 int 타입은 32비트이므로, 매우 큰 숫자를 시프트하면 최상위 비트가 잘려나가 예상과 다른 값이 반환될 수 있습니다. 반대로 오른쪽 시프트 연산자(>>)를 1비트 적용하면 숫자를 2로 나눈 몫을 얻을 수 있다는 점도 함께 기억해 두면 유용합니다.