English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ 참조 매뉴얼

비트 연산자를 배웁니다. ++이 튜토리얼에서, 예제를 통해 C

중의 비트 연산자. ++C

중에서 비트 연산자는 단일 비트 수준의 정수 데이터에 연산을 수행합니다. 이러한 작업에는 테스트, 설정 또는 실제 비트를 이동하는 작업이 포함됩니다. 예를 들어,
a & b;

a | b; ++이것은 C6중에 포함된

비트 연산자 목록을 포함합니다.연산자
이름설명
예제&
비트 AND두 개의 연산자에 동시에 존재하는 경우, 이진 AND 연산자는 결과에 한 비트를 복사합니다. 12을 얻습니다. 1100
(A & B)을 얻습니다.비트 OR
|하나의 연산자에 존재하는 경우, 이진 OR 연산자는 결과에 한 비트를 복사합니다. 61(A ^ B)을 얻습니다.11 1101
(A | B)을 얻습니다.^
비트 XOR하나의 연산자에만 존재하며 두 개의 연산자에 동시에 존재하지 않는 경우, 이진 XOR 연산자는 결과에 한 비트를 복사합니다. 49(A ^ B)을 얻습니다.11 0001
즉, 00비트 보수~1이진 보드 컴플리먼스 연산자는 일원 연산자로, "전환" 비트 효과를 가지고 있으며, 0이1,0으로 바뀝니다. -61(~A )을 얻습니다. 110즉110 00
<<좌이진수의 보드 컴플리먼스 형태입니다.왼쪽 이동이진 왼쪽 이동 연산자입니다. 왼쪽 연산자의 값을 왼쪽 연산자가 지정한 비트 수만큼 왼쪽으로 이동합니다. 2 A >> 24A << 1111 0000
>>0, 즉오른쪽 이동이진 오른쪽 이동 연산자입니다. 왼쪽 연산자의 값을 오른쪽 연산자가 지정한 비트 수만큼 오른쪽으로 이동합니다. 2 A >> 15을 얻습니다. 1111

즉, 0000

이 연산자는 컴퓨터 CPU의 수학 논리 장치(ALU)가 비트 수준에서 수학 연산을 수행하기 때문에 필요합니다.주의:

1. C ++비트 연산자는 char와 int 데이터 타입과 함께 사용할 수 있습니다.

비트 압축(&)연산자1두 연산자 모두1아니면 0을 반환합니다.

아래 테이블은 비트 AND 연산자의 작동 방식을 설명합니다. a와 b는 두 개의 바이너리 값만 가져지는 경우를 가정합니다.10과의 연산자.

aba & b
000
010
100
111

주의:비트 AND 연산자는 "트루 테이블"로 불립니다.

두 정수12와25비트 압축 연산:

12 = 00001100 (이진)
25 = 00011001 이진)
//12와25비트 압축 연산
     00001100
&  00011001
     _________
     00001000  = 8 (십진)

예제1비트 압축(&)

#include <iostream>
using namespace std;
int main() {
    //변수 선언
    int a = 12, b = 25;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "a & b = " << (a & b) << endl;
    return 0;
}

출력 결과

a = 12
b = 25
a & b = 8

위 예제에서, 두 개의 변수 a와 b를 선언했습니다. 여기서, 이 줄을 주의해 주세요.

cout << "a & b = " << (a & b) << endl;

여기서, 변수 a와 b 사이에서 비트 압축(&) 연산을 수행합니다.

2. C ++비트 OR(|) 연산자

만약 최소한 하나의 연산자가1하나라도 0이 아니면1이면 비트 OR(|) 연산자가

의 진리 표현은 비트 OR 연산자의 작동 방식을 보여줍니다. 가정하면ab이진 값만을 취할 수 있는 두 개의 연산자(즉1또는 0)의연산자.

aba | b
000
011
101
111

두 정수1225의 비트 OR 연산:

12 = 00001100 (이진)
25 = 00011001 이진)
//12와25의 비트 OR 연산
    00001100
OR 00011001
    _________
    00011101  = 29 (십진)

예제2:비트 OR(|) 연산자

#include <iostream>
int main() {
    int a = 12, b = 25;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "a | b = " << (a | b) << endl;
    return 0;
}

출력 결과

a = 12
b = 25
a | b = 29

에서비트 OR에서 a = 12와 b = 25에서29는

3. C ++비트 이이어(^) 연산자

하나만이 0이면1이면 비트 XOR ^ 연산자가1. 그러나 두 연산자 모두 0이거나 두 연산자 모두1이면 결과는 0입니다.

의 진리 표현은 비트 OR 연산자의 작동 방식을 보여줍니다. 가정하면ab이진 값만을 취할 수 있는 두 개의 연산자(즉1또는 0)의연산자.

aba ^ b
000
011
101
110

두 정수12와25의 비트 XOR 연산:

12 = 00001100 (이진)
25 = 00011001 이진)
//12와25의 비트 이이어 연산
    00001100
^ 00011001
    _________
    00010101  = 21 (십진)

예제3:비트 이이어(^) 연산자

#include <iostream>
int main() {
    int a = 12, b = 25;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "a ^ b = " << (a ^ b) << endl;
    return 0;
}

출력 결과

a = 12
b = 25
a ^ b = 21

a = 12와 b = 25의 비트 이이어 연산 결과는21는

4. C ++비트 보수 연산자

비트 보수 연산자는 일원 연산자입니다(단일 연산자에만 영향을 미칩니다). ~로 표시하여 이진 수10을 변경하면 0을 변경하면1는

비트 보수

주의해야 할 것은 어떤 정수 N의 비트 보수는 -(N+1)。예를 들어

예를 들어 정수35. 규칙에 따르면35의 비트 보수는-(35 +1) = -36. 지금, 올바른 답이 되었는지 확인해 보겠습니다.

35 = 00100011 이진)
// 비트 보수 연산자를 사용하여
~ 00100011 
 __________
  11011100

위의 예제에서 우리는00100011(35의 비트 보수는11011100입니다.220

하지만, 주의해야 할 것은 결과를 직접 십진수로 변환하여 필요한 출력을 얻을 수 없다는 것입니다. 이는 이진 결과가11011100도 동일합니다.-36

이를 이해하기 위해 먼저 계산해야 합니다.-36의 이진 출력.2을 사용하여 음수의 이진수를 계산합니다.

2의 보수

이진 계산에서1의 보수를 0으로 변경하면1만약 우리가10을 추가하면1의 보수 결과에1그렇게 하면 원래 숫자의2의 보수.

예를 들어

36 = 00100100 (이진)
1의 보수 = 11011011 
2의 부호(즉   
11011011
 +           1
_________
11011100

여기서 우리는36의2의 부호(즉-36)는11011100. 이 값은35의 비트 반전.

따라서 우리는 말할 수 있습니다35의 비트 반전은-36는

예제4비트 반전

#include <iostream>
int main() {
    int num1 = 35;
    int num2 = -150;
    cout << "~(" << num1 << ") = " << (~num1<< endl;
    cout << "~(" << num2 << ") = " << (~num2<< endl;
    return 0;
}

출력 결과

를 초기화합니다.35) = -36
를 초기화합니다.-150) = 149

위의 예제에서 우리는 두 개의 정수 변수 num1와 num2를 사용하여 각각의 값을35와-150을 초기화합니다.
그런 다음 우리는 코드(~num1)와 (~num2) 그들의 비트 반전을 계산하고 화면에 표시합니다.

35의 비트 반전 = - (35 + 1) = -36
즉 ~35 = -36
-150의 비트 반전 = - (-150 + 1) = - (-149) = 149
즉 ~(-150) = 149

이것이 우리가 출력에서 얻은 것입니다.

C ++이동 연산자

C ++프로그래밍에서는 두 개의 이동 연산자가 있습니다:

  • 이동 연산자 >>

  • 이동 연산자 <<

1와 C ++이동 연산자(>>)

이동 연산자는 모든 비트를 지정된 수의 비트로 오른쪽으로 이동시킵니다. >>으로 표시됩니다.

우리가 어떤 숫자를 오른쪽으로 이동할 때마다가장 낮은 유효 비트로 버려지고가장 높은 유효 비트로 대체됩니다.

비트를 오른쪽으로 이동합니다

위 그림에서 볼 수 있듯이, 우리는4비트 숫자. 우리가 이에 대해1비트로 대체됩니다.

결과적으로 가장 오른쪽 비트는 버려지고(Discribed) 가장 왼쪽 비트는 공간을 유지합니다. 이 공간은0대체 비트(Replacement Bit)로 대체됩니다.

2와 C ++이동 연산자

이동 연산자는 모든 비트를 지정된 수의 비트로 왼쪽으로 이동시킵니다. <<으로 표시됩니다.

비트를 왼쪽으로 이동합니다

위 그림에서 볼 수 있듯이, 우리는4비트 숫자. 우리가 이에 대해1비트를 왼쪽으로 이동시키면, 각 단일 비트는 왼쪽으로 이동합니다1비트로 대체됩니다.

결과적으로 가장 왼쪽 비트는 버려지고(Discribed) 가장 오른쪽 비트는 공간을 유지합니다. 이 공간은0대체 비트(Replacement Bit)로 대체됩니다.

예제5:이동 연산자

#include <iostream>
int main() {
    //두 정수 변수를 선언합니다
    int num = 212, i;
    //우이동 연산
    cout << "우이동:\" << endl;
    //for 루프를 사용하여 num을 0비트에서 오른쪽으로 이동시킵니다3비트
    for (i = 0; i < 4; i++) {
        cout << "212 >> " << i << " = " << (212 >> i) << endl;
    }
    //좌이동 연산
    cout << "\n좌이동:\
    //for 루프를 사용하여 num을 0비트에서 왼쪽으로 이동시킵니다3비트
    for (i = 0; i < 4; i++) {
        cout << "212 << " << i << " = " << (212 << i) << endl;
    }
    return 0;
}

출력 결과

오른쪽 이동:
212 >> 0 = 212
212 >> 1 = 106
212 >> 2 = 53
212 >> 3 = 26
왼쪽 이동:
212 << 0 = 212
212 << 1 = 424
212 << 2 = 848
212 << 3 = 1696

위 프로그램의 출력에서, 어떤 숫자라도 다음과 같이 추론할 수 있습니다:N따라서, 오른쪽 이동 연산자의 결과는 다음과 같습니다:

N >> 0 = N
N >> 1 = (N >> 0) / 2
N >> 2 = (N >> 1) / 2
N >> 3 = (N >> 2) / 2

그리고 다른 것들도 있습니다.

따라서, 왼쪽 이동 연산자의 결과는 다음과 같습니다:

N << 0 = N
N << 1 = (N << 0) * 2
N << 2 = (N << 1) * 2
N << 3 = (N << 2) * 2

그리고 다른 것들도 있습니다.

따라서, 우리는 다음과 같은 결론을 내릴 수 있습니다.

N >> m = [ N >> (m-1) ] / 2
N << m = [ N << (m-1) ] * 2