Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
9분 33초
비트 연산자는 C#에서 정수의 개별 비트를 조작할 수 있게 해주는 필수적인 부분입니다. 이러한 연산자는 저수준 프로그래밍, 성능 최적화 및 플래그 작업에 매우 유용합니다. 이 글에서는 Tim Corey의 동영상 "C#의 이진법: 10분 안에 배우는 비트 시프트 좌측 및 비트 시프트 우측"을 참고하여 비트 시프트에 대해 더 자세히 살펴보겠습니다.
Tim은 C#에서 이진법을 이해하는 방법에 대한 시리즈를 이어가기 시작합니다. 이번 강의는 시리즈의 네 번째 강의이며, 비트 시프팅에 대해 다룹니다. 목표는 비트를 왼쪽이나 오른쪽으로 이동시키는 것이 숫자에 어떤 영향을 미치는지, 그리고 이 기술을 프로그래밍에 어떻게 활용할 수 있는지 이해하는 것입니다.
팀은 정수를 2진수로 변환하고 8비트 형식으로 표시되도록 보장하는 ConvertToBinary이라는 메서드를 생성하여 예제를 설정합니다. 이를 통해 비트 시프팅이 어떻게 작동하는지 더 쉽게 시각화할 수 있습니다.
팀은 좌측 시프트 연산자(<<)를 사용하여 비트 시프트 좌측의 개념을 소개합니다. 그는 n만큼 왼쪽으로 시프트하는 것이 숫자를 2^n만큼 곱하는 것과 동등하다고 설명합니다.
예를 들어, 그는 숫자 9부터 시작하는데, 이를 이진수로 나타내면 다음과 같습니다.
0000100100001001그가 세 자리(9 << 3) 만큼 왼쪽으로 시프트할 때, 그 결과는 다음과 같습니다:
01001000&H48이 새로운 2진수 값은 72를 나타냅니다. 팀은 왼쪽으로 시프트하는 것이 기본적으로 오른쪽에 세 개의 0을 추가하여 숫자를 세 번 2로 곱하는 것(즉, 9 * 2^3 = 72)이라고 강조합니다.
팀은 기존 숫자를 이동하는 것도 유용하지만, 더 일반적인 방법은 숫자 1을 특정 위치로 옮기는 것이라고 설명합니다. 예를 들어:
1 << 31 << 3이렇게 하면 비트가 네 번째 위치로 이동하여 다음과 같은 결과가 나타납니다.
00001000&H00001000이 이진수는 8입니다. 팀은 이 기법이 비트마스크나 플래그를 다룰 때 특히 유용하다고 지적합니다.
다음으로, 팀은 우측 시프트 연산자(>>)를 사용하여 비트 시프트 우측을 설명합니다. n 만큼 오른쪽으로 시프트하는 것은 숫자를 2^n로 나누고 나머지를 버리는 것과 동등합니다.
이전 예제를 사용하여, 2진수에서 숫자 9(00001001)를 두 자리(9 >> 2) 만큼 오른쪽으로 시프트한 결과는 다음과 같습니다:
00000010&H00000010이 값은 2입니다. 팀은 오른쪽으로 시프트하면 기본적으로 오른쪽에서 비트가 제거되어 숫자의 값이 줄어든다고 설명합니다.
팀은 프로그래밍에서 비트 시프팅이 왜 중요한지에 대해 이야기합니다. 주요 사용 사례는 다음과 같습니다.
계산 최적화 : 비트 시프트 연산을 통해 2의 거듭제곱을 이용한 곱셈과 나눗셈을 대체하여 연산 속도를 향상시킬 수 있습니다.
특정 비트 설정 및 해제 : 플래그 기반 열거형에서 비트 시프트는 부울 값의 효율적인 저장 및 조작을 가능하게 합니다.
하드웨어 작업 : 많은 저수준 하드웨어 작업은 비트 단위 조작에 의존합니다.
팀은 비트 시프트 연산이 다른 연산과 함께 사용되는 경우가 많다는 점을 강조하며 결론을 맺습니다. 비트를 효과적으로 이동시키는 방법을 이해하면 특히 플래그, 이진 계산 및 성능이 중요한 애플리케이션과 관련된 시나리오에서 더욱 효율적이고 최적화된 코드를 작성할 수 있습니다.
팀 코리의 설명을 따라가면서 비트 단위 좌회전 및 우회전 연산의 작동 방식, 숫자에 미치는 영향, 그리고 일반적인 사용 사례를 살펴보았습니다. 시각적이고 심층적인 단계별 학습을 원하신다면 Tim의 비디오가 C#에서 비트 연산을 익히는 데 매우 유용한 자료입니다.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy