C & C++ 프로그래밍의 비트 연산자

게시 됨: 2022-12-09

RAM에서 데이터는 일련의 바이트로 구성됩니다. 모든 바이트에는 8개의 연속 비트가 포함됩니다. C & C++ 비트 연산자는 데이터 비트에 대해 일부 산술 연산을 수행하려는 경우에 유용합니다. 그것들은 상당히 빠르며 때때로 프로그램의 효율성을 향상시키기 위해 사용됩니다. 그들은 비트 수준에서 작업을 수행하거나 다양한 방식으로 비트를 조작하는 비트 단위 알고리즘에 대해 작업합니다.

C & C++의 비트 연산자 유형:

  1. 비트 AND
  2. 비트 OR
  3. 비트별 NOT
  4. 비트 배타적 논리합(XOR)
  5. 왼쪽 시프트 연산자
  6. 오른쪽 시프트 연산자

각각의 세부 사항을 살펴보겠습니다.

목차

1. 비트 AND:

C 또는 C++의 비트 AND 연산자는 단일 앰퍼샌드(&)를 사용합니다. 두 개의 숫자를 피연산자로 사용하고 모든 비트에서 AND를 수행합니다. 결과는 두 비트가 모두 1인 경우에만 1입니다. 비트 중 하나라도 0이면 결과는 0입니다. 본질적으로 C & C++의 이 이항 연산자 는 주어진 두 숫자의 모든 위치에서 비트의 논리 AND를 취합니다. 이진 형식.

예시:

두 숫자 a & b의 이진 표현이 다음과 같다고 가정합니다.

a = 01011000

b = 10111001

따라서 a & b = 00011000

위의 예에서 알 수 있듯이 숫자 a와 b가 모두 1인 곳에만 결과가 '1'로 표시되고 나머지는 모두 '0'으로 결과가 표시됩니다.

2. 비트 OR:

C & C++에서 Bitwise OR은 Bitwise AND와 매우 유사하게 작동합니다. 유일한 차이점은 비트 OR 연산자에서 결과에서 비트의 위치가 '1'이 되려면 두 비트 중 하나만 '1'이어야 한다는 것입니다. 이 연산자는 두 개의 숫자를 피연산자로 사용하고 두 숫자의 모든 비트에 대해 OR을 수행합니다.

다음과 같은 방식으로 작동합니다.

  • 두 비트가 모두 '1'이면 결과는 '1'입니다.
  • 두 비트가 모두 '0'이면 결과는 '0'입니다.
  • 비트 중 하나라도 '1'이면 결과는 '1'입니다.

가장 간단하고 가장 자주 사용되는 C++ 비트 연산자 중 하나입니다 . 기호는 파이프 |입니다. 또한 부울 논리 연산자 ||와 동일합니다.

예시:

두 숫자의 이진 표현을 가정합니다. b는:

a = 01101001

b = 10111000

그래서, | b = 11111001

3. 비트별 NOT:

Bitwise NOT 연산자라고도 하며 결과의 모든 비트를 뒤집습니다. 기호는 물결표(~)입니다. 이 연산자의 작업을 기억하는 쉬운 방법은 물결표가 때때로 트위들이라고 알려져 있고 비트 보수가 각 비트를 트위들링한다는 것입니다. 즉, 1이면 결과는 0이고 그 반대도 마찬가지입니다. 즉, C & C++ 의 이 비트 연산자는 하나의 숫자를 취하고 모든 비트를 반전시킵니다.

부호 없는 숫자에 대해 가능한 가장 큰 값을 결정할 때 이것은 가장 유용한 C++ 비트 연산자 중 하나입니다 .

예시:

부호 없는 정수 번호 = ~0;

여기서 0은 모두 0: 00000000을 의미합니다. 따라서 Bitwise NOT 연산자를 구현하면 결과는 1: 11111111이 됩니다. num은 부호 없는 정수이므로 부호 비트나 2의 보수에 대해 걱정할 필요가 없습니다. 1s는 결과에서 가능한 가장 큰 숫자입니다.

Bitwise NOT 연산자의 중요한 특성 중 하나는 2의 보수입니다. 어떤 수의 2의 보수는 그 수의 보수에 1을 더한 것과 같습니다.

예시:

a = 00000000

따라서 2의 보수 = -(11111111+1) = -00000000 = -0(십진수)

참고: 숫자 N의 비트 보수는 -(N+1)과 같습니다.

세계 최고의 대학에서 소프트웨어 개발 과정을 온라인으로 배우십시오. PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 취득하여 경력을 빠르게 쌓으십시오.

4. 비트 배타적 OR(XOR):

Exclusive-OR 연산은 두 개의 입력을 받아들이고 둘 중 하나가 1이면 1을 출력합니다. 그러나 둘 다 1이면 결과는 0입니다. 두 입력이 모두 0이거나 둘 다 1이면 결과는 0입니다. 결과 XOR의 값은 두 비트가 다른 경우에만 1입니다. C & C++에서 이 이항 연산자의 기호는 캐럿(^)입니다. 또한 C & C++ 의 이 비트 연산자는 XOR로 약칭됩니다. 모든 비트 쌍에 대해 배타적 OR 연산을 수행합니다. 이 연산자에 해당하는 부울 연산자가 없다는 점에 유의해야 합니다.

예시:

다음과 같이 두 개의 숫자가 있다고 가정합니다.

a = 10101010

b = 01110010

이제 a ^ b = 10101010 ^ 01110010 = 11011000

다음과 같은 방식으로 XOR을 이해할 수 있습니다. A를 호출하는 비트(0 또는 1)가 있다고 가정합니다. 이제 A XOR 0을 취하면 A를 돌려받게 됩니다. 따라서 A가 1이면 1이 되고 그 반대도 마찬가지입니다. A XOR 1을 취하는 것은 A를 뒤집는 것을 의미합니다. 따라서 A가 1이면 0이 되고 그 반대도 마찬가지입니다.

비트별 XOR 연산을 두 번 구현하면, 즉 A와 B의 두 비트가 있고 C = A XOR B로 설정하면 C XOR B를 수행합니다. 이 경우 얻는 결과는 A XOR B XOR C입니다. A의 각 비트를 두 번 뒤집거나 어떤 비트도 뒤집지 않습니다. 따라서 A를 있는 그대로 돌려받기만 하면 됩니다.

이진 XOR 연산을 일종의 선택적 트위들이라고 생각할 수 있습니다. 두 숫자 중 하나가 모두 1인 두 숫자에 대해 XOR을 구현하면 결과는 트위들과 같습니다.

5. 왼쪽 시프트 연산자:

이 비트 연산자는 모든 비트를 지정된 비트 수만큼 왼쪽으로 이동합니다. 왼쪽 시프트 연산자가 비운 비트 위치는 0으로 채워집니다. 기호는 <<입니다.

C 또는 C++에서는 먼저 두 개의 숫자를 취하고 첫 번째 피연산자의 비트를 왼쪽으로 이동하고 두 번째 피연산자가 숫자를 얼마나 많은 위치로 이동할지 나타내는 방식으로 작동합니다.

통사론:

<<= 5

다음은 왼쪽 시프트 연산자를 구현하는 C/C++ 프로그램의 예입니다.

정수 메인()

{

정수 a = 5;

<<= 2;

카운트 << “x : ” << x << endl;

}

출력: a = 20

소프트웨어 엔지니어링에 대한 인기 코스 및 기사

인기 프로그램
소프트웨어 개발의 임원 PG 프로그램 - IIIT B 블록체인 인증 프로그램 - PURDUE 사이버 보안 인증 프로그램 - PURDUE 컴퓨터 과학 MSC - IIIT B
기타 인기 기사
미국의 클라우드 엔지니어 급여 2021-22 미국의 AWS 솔루션 아키텍트 급여 미국의 백엔드 개발자 연봉 미국 프론트엔드 개발자 연봉
미국의 웹 개발자 급여 2022년 스크럼 마스터 인터뷰 질문 2022년 사이버 보안 분야에서 경력을 시작하는 방법은 무엇입니까? 공대생을 위한 미국 취업 옵션

6. 오른쪽 시프트 연산자:

이 비트 연산자는 지정된 비트 수만큼 모든 비트를 오른쪽으로 이동합니다. 기호는 >>입니다. C 또는 C++에서 이 연산자는 먼저 두 개의 숫자를 취하고 첫 번째 피연산자의 비트를 오른쪽으로 이동하며 두 번째 피연산자는 숫자의 이동량을 지정합니다.

통사론:

a >>= 5

오른쪽 시프트 연산자를 구현하는 C/C++ 프로그램 예제:

정수 메인() {

정수 a = 5;

a >> = 2;

카운트 << “x : ” << x << endl;

}

출력: a = 1

소프트웨어 엔지니어링에 대한 인기 코스 및 기사

인기 프로그램
소프트웨어 개발의 임원 PG 프로그램 - IIIT B 블록체인 인증 프로그램 - PURDUE 사이버 보안 인증 프로그램 - PURDUE 컴퓨터 과학 MSC - IIIT B
기타 인기 기사
미국의 클라우드 엔지니어 급여 2021-22 미국의 AWS 솔루션 아키텍트 급여 미국의 백엔드 개발자 급여 미국 프론트엔드 개발자 연봉
미국의 웹 개발자 급여 2022년 스크럼 마스터 인터뷰 질문 2022년 사이버 보안 분야에서 경력을 시작하는 방법은 무엇입니까? 공대생을 위한 미국 취업 옵션

C & C++에서 비트 연산자는 언제 사용해야 합니까?

  • 공간 절약:

비트 연산자는 공간 절약에 도움이 됩니다. 개별 비트 수준에서 작업할 때 발생하는 일반적인 문제 중 하나는 더 많은 공간을 원하거나 시간을 절약하기 위해 프로그램의 많은 부분을 재설계해야 할 수도 있다는 것입니다. 그러나 C & C++에서 비트 연산자를 사용하면 종속성을 제거할 수 있습니다. 예를 들어 ~0을 사용하여 가능한 가장 큰 정수를 얻을 수 있습니다. 2를 곱하기 위한 비트 이동은 일반적인 작업입니다. 따라서 비트 조작의 고급 사용이 경우에 따라 영향을 미칠 수 있는 것과 달리 가독성에 영향을 미치지 않습니다.

  • 암호화:

부울 특성을 저장하는 데 사용할 비트 필드가 필요한 시스템 또는 일부 유형의 암호화에서 작업하는 경우.

비트 연산자에 대한 독특한 사실

  • 캐리가 포함되지 않은 경우 두 숫자의 비트 OR은 단순히 해당 숫자의 합입니다. 그렇지 않으면 비트 AND를 추가하기만 하면 됩니다. 예를 들어 x = 5(101) 및 y = 2(010)이라고 가정합니다. 관련된 캐리가 없기 때문에 합계는 단순히 x|y입니다. 그러나 이제 'x'를 6(110)으로 변경하면 캐리가 포함되기 때문에 합이 x|y + x&y로 변경됩니다.
  • 비트별 XOR 연산자는 기술 인터뷰 관점에서 가장 가치가 있습니다. 이와 관련된 인터뷰 문제 중 하나의 예가 여기에서 논의됩니다. "하나의 숫자를 제외하고 짝수 번 발생하는 모든 요소로 구성된 주어진 숫자 집합에 대해 홀수 발생하는 숫자를 찾으십시오." 이 문제를 해결하려면 모든 숫자에 XOR을 수행해야 합니다.
  • 음수에는 오른쪽 및 왼쪽 시프트 비트 연산자를 사용하면 안 됩니다. 시프트 수를 결정하는 두 번째 피연산자는 C & C++에서 정의되지 않은 동작을 유발하는 음수를 포함합니다. 예를 들어, 1 >>- 1 및 1 << -1의 결과는 모두 정의되지 않습니다.
  • 숫자의 이동이 정수의 용량을 초과하는 경우 동작이 지정되지 않습니다. 예를 들어 정수가 64비트 형식으로 저장되는 경우 1 << 65는 지정되지 않습니다.
  • 두 번째 피연산자(이동 수를 결정하는 피연산자)가 0이면 이동 연산이 발생하지 않습니다.

UpGrad와 함께 컴퓨터 공학 여정을 시작하세요:

프런트엔드 개발(JavaScript, HTML, CSS), 백엔드(NoSQL-MongoDB) 및 마이크로서비스에 대해 자세히 배우고 싶다면 UpGrad의 컴퓨터 과학 석사 과정 을 이수할 수 있습니다 . IIIT Bangalore & LJMU Alumni Status에서 제공하는 이 과정은 전 세계 기술 대기업에서 소프트웨어 엔지니어/풀스택 개발자로 경력을 쌓는 데 도움이 됩니다.

이 과정은 초보자 및 비기술 코더를 위한 Career Transition Bootcamp에 대한 무료 액세스를 다룹니다. 이 과정에서 10개 이상의 프로그래밍 언어 및 도구를 배우고 업계에서 복잡한 역할을 맡을 수 있도록 철저하게 준비합니다.

C++에서 비트 연산자의 용도는 무엇입니까?

C++에서 비트 연산자는 이진 수준에서 정수 데이터에 대해 연산을 수행합니다. 개별 비트 조작과 관련된 비트 패턴에서 작동합니다. 따라서 비트 단위 연산을 비트 수준 프로그래밍이라고도 합니다. C++의 비트 연산자는 두 자리, 즉 0과 1에서만 작동하기 때문에 주로 더 빠른 계산에 사용됩니다. 이러한 연산자는 테스트를 수행하고 실제 비트를 이동할 수도 있습니다.

코드에서 왼쪽 및 오른쪽 시프트 연산자를 함께 사용할 수 있습니까?

예, 왼쪽 시프트 연산자와 오른쪽 시프트 연산자를 결합한 다음 정수 식에서 데이터를 추출할 수 있습니다.

보완 연산자는 전체 코드 시퀀스를 뒤집습니까?

아니오, 그렇지 않습니다. 1과 0을 뒤집습니다. 따라서 모든 1은 0이 되고 그 반대도 마찬가지입니다.

Bitwise 보수 연산자의 다른 이름이 보수 연산자인 이유는 무엇입니까?

그 이유는 항상 하나의 피연산자 또는 값만 사용하기 때문입니다. 단항 연산자입니다. 비트에 대해 보수를 수행하면 모든 0이 1이 되고 그 반대도 마찬가지입니다. 예를 들어 값이 1111 0000인 정수 표현식이 있는 경우 비트 보수 연산을 수행한 후 값은 0000 1111이 됩니다.