비트 단위 OperaC의 토르: AND, OR, XOR, Shift & 보완
⚡ 스마트 요약
C 언어의 비트 연산자는 정수 피연산자에 대해 AND, OR, XOR, 보수 및 시프트 연산을 사용하여 개별 비트 수준에서 데이터를 조작합니다. 이를 통해 저수준 및 임베디드 프로그래밍에서 더 빠른 계산을 수행하고, 플래그를 압축하고, 하드웨어를 제어할 수 있습니다.

비트와이즈란 무엇인가 Opera토르?
비트 단위 Opera비트 연산은 비트 수준에서 데이터를 조작하는 데 사용되며, 이를 비트 수준 프로그래밍이라고도 합니다. 비트 연산은 하나 이상의 비트 패턴 또는 이진수를 개별 비트 수준에서 처리합니다. 이러한 연산은 수치 계산에서 계산 속도를 높이는 데 사용됩니다.
다음은 'C' 프로그래밍 언어에서 제공하는 비트 연산자 목록입니다.
| Opera바위 산 | 의미 |
|---|---|
| & | 비트 AND 연산자 |
| | | 비트 단위 OR 연산자 |
| ^ | 비트 단위 배타적 OR 연산자 |
| ~ | 이진 1의 보수 Operator는 단항 연산자입니다 |
| << | 왼쪽 이동 연산자 |
| >> | 오른쪽 이동 연산자 |
비트 연산자는 float, double 등과 같은 기본 데이터 형식에 직접 적용할 수 없습니다. 비트 연산자는 주로 다음과 같은 경우에 사용된다는 점을 항상 기억하세요. 정수형 데이터 타입 호환성 때문입니다.
비트 논리 연산자는 데이터를 비트 단위로 처리하는데, 가장 오른쪽 비트인 LSB(최하위 비트)에서 시작하여 가장 왼쪽 비트인 MSB(최상위 비트)로 이동합니다.
비트 논리 연산자의 계산 결과는 아래 표에 나와 있습니다.
| x | y | x & y | 엑스 | 와이 | x^y |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
비트 AND
이것은 가장 일반적으로 사용되는 논리적 비트 연산자 중 하나입니다. 단일 앰퍼샌드 기호(&)로 표현됩니다. 두 개의 정수 표현식이 (&) 연산자의 양쪽에 작성됩니다.
비트 AND 연산의 결과는 두 비트 모두 값이 1이면 1이고, 그렇지 않으면 결과는 항상 0입니다.
다음과 같은 값을 갖는 2개의 변수 op1과 op2가 있다고 가정해 보겠습니다.
Op1 = 0000 1101 Op2 = 0001 1001
변수 op1 및 op2에 대한 AND 연산의 결과는 다음과 같습니다.
Result = 0000 1001
보시다시피 두 변수는 조금씩 비교됩니다. 두 변수의 비트 값이 1일 때마다 결과는 1이거나 그렇지 않으면 0이 됩니다.
비트 OR
단일 수직 막대 기호(|)로 표현됩니다. 두 개의 정수 표현식이 (|) 연산자의 양쪽에 작성됩니다.
비트 OR 연산의 결과는 표현식 중 적어도 하나가 1의 값을 갖는 경우 1입니다. 그렇지 않으면 결과는 항상 0입니다.
다음과 같은 값을 갖는 2개의 변수 op1과 op2가 있다고 가정해 보겠습니다.
Op1 = 0000 1101 Op2 = 0001 1001
변수 op1 및 op2에 대한 OR 연산의 결과는 다음과 같습니다.
Result = 0001 1101
보시다시피 두 변수는 조금씩 비교됩니다. 변수 중 하나의 비트 값이 1일 때마다 결과는 1이거나 그렇지 않으면 0이 됩니다.
비트 단위 배타적 OR
기호(^)로 표현됩니다. 두 개의 정수 표현식이 (^) 연산자의 양쪽에 쓰여집니다.
비트 단위 배타적 OR 연산의 결과는 표현식 중 하나만 1 값을 가지는 경우 1입니다. 그렇지 않으면 결과는 항상 0입니다.
다음과 같은 값을 갖는 2개의 변수 op1과 op2가 있다고 가정해 보겠습니다.
Op1 = 0000 1101 Op2 = 0001 1001
변수 op1 및 op2에 대한 XOR 연산의 결과는 다음과 같습니다.
Result = 0001 0100
보시다시피 두 변수는 조금씩 비교됩니다. 하나의 변수만 값 1을 보유할 때마다 결과는 0이고 그렇지 않으면 0이 결과가 됩니다.
비트 논리 연산자를 보여주는 간단한 프로그램을 작성해 보겠습니다.
#include <stdio.h> int main() { int a = 20; /* 20 = 010100 */ int b = 21; /* 21 = 010101 */ int c = 0; c = a & b; /* 20 = 010100 */ printf("AND - Value of c is %d\n", c ); c = a | b; /* 21 = 010101 */ printf("OR - Value of c is %d\n", c ); c = a ^ b; /* 1 = 0001 */ printf("Exclusive-OR - Value of c is %d\n", c ); getch(); }
출력:
AND - Value of c is 20 OR - Value of c is 21 Exclusive-OR - Value of c is 1
비트 단위 이동 연산자
비트 단위 시프트 연산자는 비트 패턴을 왼쪽 또는 오른쪽으로 이동시키는 데 사용됩니다. 'C' 언어에서 제공하는 왼쪽 및 오른쪽 시프트 연산자는 다음과 같습니다.
Operand << n (Left Shift) Operand >> n (Right Shift)
여기
- 피연산자는 이동 연산을 수행해야 하는 정수 표현식입니다.
- 'n'은 정수 표현식에서 이동해야 하는 비트 위치의 총 개수입니다.
왼쪽 쉬프트 연산은 'n'개의 비트를 왼쪽으로 쉬프트합니다. 표현식의 가장 왼쪽 비트가 팝되고, 값이 0인 n개의 비트가 오른쪽에 채워집니다.
오른쪽 쉬프트 연산은 'n'개의 비트를 오른쪽으로 쉬프트합니다. 표현식에서 가장 오른쪽에 있는 'n'개의 비트가 팝되고, 값 0이 왼쪽에 채워집니다.
예: x는 데이터 1111을 갖는 정수 표현식입니다. 이동 연산을 수행한 후의 결과는 다음과 같습니다.
x << 2 (left shift) = 1111<<2 = 1100 x>>2 (right shift) = 1111>>2 = 0011
Shift연산자들을 조합하면 이를 사용하여 예를 들 수 있습니다.trac정수 표현식에서 데이터를 가져옵니다. 비트 시프트 연산자의 사용법을 보여주는 프로그램을 작성해 보겠습니다.
#include <stdio.h> int main() { int a = 20; /* 20 = 010100 */ int c = 0; c = a << 2; /* 80 = 101000 */ printf("Left shift - Value of c is %d\n", c ); c = a >> 2; /*05 = 000101 */ printf("Right shift - Value of c is %d\n", c ); return 0; }
출력:
Left shift - Value of c is 80 Right shift - Value of c is 5
왼쪽 이동 연산을 수행하면 값은 80이 되며, 이 값을 이진수로 환산하면 101000이 됩니다.
오른쪽 이동 연산을 수행한 후 값은 5가 되며, 이진수는 000101입니다.
비트 단위 보수 연산자
비트 보수는 항상 하나의 값이나 피연산자만 취하기 때문에 1의 보수 연산자라고도 합니다. 단항 연산자입니다.
임의의 비트에 대해 보수를 수행하면 모든 1이 0이 되고 그 반대도 마찬가지입니다.
0000 1111을 포함하는 정수 표현식이 있고 비트 보수 연산을 수행하면 값은 1111 0000이 됩니다.
비트 보수 연산자는 틸드(~) 기호로 표시합니다.
비트 보수 연산자의 구현을 보여주는 프로그램을 작성해 보겠습니다.
#include <stdio.h> int main() { int a = 10; /* 10 = 1010 */ int c = 0; c = ~(a); printf("Complement - Value of c is %d\n", c ); return 0; }
출력:
Complement - Value of c is -11
다음은 지금까지 설명한 모든 연산자의 예제가 포함된 또 다른 프로그램입니다.
#include <stdio.h> main() { unsigned int x = 48; /* 48 = 0011 0000 */ unsigned int y = 13; /* 13 = 0000 1101 */ int z = 0; z =x & y; /* 0 = 0000 0000 */ printf("Bitwise AND Operator - x & y = %d\n", z ); z = x | y; /* 61 = 0011 1101 */ printf("Bitwise OR Operator - x | y = %d\n", z ); z= x^y; /* 61 = 0011 1101 */ printf("Bitwise XOR Operator- x^y= %d\n", z); z = ~x; /*-49 = 11001111 */ printf("Bitwise One's Complement Operator - ~x = %d\n", z); z = x << 2; /* 192 = 1100 0000 */ printf("Bitwise Left Shift Operator x << 2= %d\n", z ); z= x >> 2; /* 12 = 0000 1100 */ printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}
프로그램을 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
Bitwise AND Operator - x & y = 0 Bitwise OR Operator - x | y = 61 Bitwise XOR Operator- x^y= 61 Bitwise One's Complement Operator - ~x = -49 Bitwise Left Shift Operator x << 2= 192 Bitwise Right Shift Operator x >> 2= 12
