C의 비트 연산

Muhammad Husnain 2023년10월12일
  1. 비트 &&= 연산자
  2. 비트 ||= 연산자
  3. 비트 단위 ^^= 연산자
  4. 비트 시프트(>>) 및 (<<) 연산자
  5. 산술 ShortHands(복합 대입문)
  6. 어휘 분석 및 수행할 수 없는 작업
C의 비트 연산

이 문서에서는 C의 비트 연산(및 연산자)에 대해 설명합니다. 이러한 개념은 C++에도 적용됩니다.

이러한 연산자 외에도 이 문서에서는 일반적으로 잘못 이해되는 연산자 할당 속기 표기법(예: += 연산자 할당)에 대해 설명합니다. 비트 연산자의 맥락에서 이에 대해 논의할 것입니다.

이 기사에는 표기법과 해당 출력을 모두 보여주는 이러한 각 연산자의 예가 있습니다. 또한 C에서 지원하지 않는 속기 표기법에 대해서도 설명합니다.

마지막으로 컴파일러가 토큰을 생성하는 프로그램 컴파일 단계인 어휘 분석에 대해 간략하게 설명합니다. 이들은 키워드, 식별자, 상수, 문자열 리터럴 등과 같은 코드의 가장 작은 부분입니다.

비트 &&= 연산자

&비트 and 연산자입니다. 다음과 같이 사용됩니다.

int test = 0x6A;
test = test & 0x50;

위의 코드는 0x6A0x50 사이의 and 비트 비교를 실행하고 결과를 test 변수에 저장합니다. 비트 and 연산은 두 인수의 각 비트를 비교합니다.

결과는 두 피연산자의 비트가 1인 경우 각 비트에 대해 1이고 그렇지 않은 경우 결과는 0입니다.

0x6A의 바이너리는 1101010이고 0x50의 바이너리는 1010000입니다. 따라서 and 연산 결과는 1000000입니다.

이제 속기 표기법에 대해 논의할 수 있습니다. 위의 코드는 다음과 같이 편리하게 작성할 수 있습니다.

int test2 = 0x6A;
test2 &= 0x50;

일반적으로 x &= 5x = x & 5와 같습니다. 그러나 이것은 다른 작업으로도 확장될 수 있습니다. 가장 일반적인 것은 +=, -=, *=, /=입니다.

이 속기 표기법의 더 드문 예는 >>=, <<=, |=, &=, ^=와 같은 비트 연산입니다.

비트 ||= 연산자

|비트 포함 or 연산자입니다.

int test = 0x6A;
test = test | 0x50;

이에 대한 속기 표기법은 다음과 같습니다.

int test = 0x6A;
test |= 0x50;

test의 결과 값은 1111010입니다.

비트 포함 or 연산은 두 인수의 각 비트를 비교합니다. 결과는 피연산자의 비트 중 하나가 1인 경우 각 비트에 대해 1이고 결과는 두 피연산자가 모두 0인 경우에만 0입니다.

비트 단위 ^^= 연산자

^비트 배타적 or 연산자입니다.

int test = 0x6A;
test = test ^ 0x50;

이에 대한 속기 표기법은 다음과 같습니다.

int test = 0x6A;
test ^= 0x50;

test의 결과 값은 0111010입니다.

비트 배타적 or 연산은 두 인수의 각 비트를 비교합니다. 두 비트의 값이 다른 경우 결과 비트 값은 결과의 각 비트에 대해 1입니다. 두 비트가 동일한 값을 갖는 경우 0입니다.

비트 시프트(>>) 및 (<<) 연산자

시프트 연산자에는 두 개의 피연산자가 있습니다.

시프트는 왼쪽 피연산자에 적용됩니다. 그리고 시프트가 적용되는 비트 수는 오른쪽 피연산자에 의해 결정됩니다.

왼쪽 시프트 <<와 오른쪽 시프트 >>의 두 가지 종류의 시프트가 있습니다. 일반적으로 다음과 같이 사용됩니다.

int test5 = 0xFF;
test5 = test5 << 2;

이 예에서 test5에 저장된 비트는 2비트만큼 왼쪽으로 이동됩니다(연산자의 지시에 따라).

Before shift : 0011111111 After shift : 1111111100

마찬가지로 오른쪽 시프트의 경우:

int test5 = 0xFF;
test5 = test5 >> 2;

이 예에서 test5에 저장된 비트는 2비트만큼 오른쪽으로 이동됩니다.

Before shift : 11111111 After shift : 00111111

오른쪽 및 왼쪽 시프트에 대한 속기 표기법은 위에 있는 것과 유사합니다.

속기 오른쪽 시프트 표기법:

int test5 = 0xFF;
test5 >>= 2;

속기 왼쪽 시프트 표기법:

int test5 = 0xFF;
test5 <<= 2;

산술 ShortHands(복합 대입문)

이 섹션에서는 산술 연산의 약어에 대해 간략하게 설명합니다. 변수 선언 이후의 다음 두 문은 동일합니다.

추가:

int addTest = 5;

addTest += 5;

그리고

addTest = addTest + 5;

곱셈의 경우:

int multTest = 5;

multTest *= 5;

그리고

multTest = multTest * 5;

나눗셈:

int divTest = 5;

divTest /= 5;

그리고

divTest = divTest / 5;

빼기:

int subTest = 5;

subTest -= 5;

그리고

subTest = subTest - 5;

모듈로/나머지(%)의 경우:

int remTest = 5;

remTest %= 5;

그리고

remTest = remTest % 5;

어휘 분석 및 수행할 수 없는 작업

어휘 분석은 각 피연산자와 연산자가 토큰으로 분리되는 단계입니다. 예를 들어, x + 2 문에서 x가 변수인 경우 분석기는 x2를 피연산자로 구분하고 +를 연산자로 구분합니다.

속기 표기의 경우 |=와 같은 연산자는 식별하기에 충분한 토큰 코드와 함께 저장됩니다. 속기가 작동하지 않으면 C 어휘 분석기에 대해 (단순히) 정의되지 않은 것입니다. 어휘 분석기를 통과하더라도 구문 분석기는 이를 거부합니다.

이것이 >>>> 또는 ||= 또는 &&=와 같은 속기가 작동하지 않는 이유입니다. 아마도 그들이 유효한 연산자로 받아들여지는 프로그래밍 언어가 있을 것입니다.

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

관련 문장 - C Bit