비트 단위 OperaC의 토르: AND, OR, XOR, Shift & 보완

⚡ 스마트 요약

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

  • 🧮 Opera토르: AND(&), OR(|), XOR(^), 보수(~), 왼쪽 시프트(<<), 오른쪽 시프트(>>)의 6가지 연산자는 비트 단위로 작동합니다.
  • 🔗 그리고 또는: & 연산자의 결과는 두 비트 모두 1일 때만 1이 되고, | 연산자는 두 비트 중 하나라도 1이면 1이 됩니다.
  • 🔀 XOR: ^ 연산자를 사용하면 정확히 하나의 비트가 1일 때 결과가 1이 되므로 비트를 토글하거나 값을 교환하는 데 유용합니다.ping values.
  • ↔️ Shifts: << 및 >> 연산자는 비트를 왼쪽 또는 오른쪽으로 이동시켜 2의 거듭제곱으로 곱하거나 나눕니다.
  • 🔁 보어: ~ 연산자는 모든 비트를 뒤집으므로 0000 1111은 1111 0000이 됩니다.
  • 🤖 AI 도움말: AI 비서와 GitHub Copilot은 비트마스크 및 시프트 로직을 빠르게 생성하고 설명합니다.

비트 단위 OperaC의 tors

비트와이즈란 무엇인가 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

자주 묻는 질문

비트 단위 AND(&)는 개별 비트에 대해 연산을 수행하고 정수를 반환하는 반면, 논리 AND(&&)는 전체 표현식을 테스트하고 참 또는 거짓의 단일 부울 값을 반환합니다.

Shift 1 마스크를 만들려면 값 | (1 << n)으로 설정하고, 값 & ~(1 << n)으로 지우고, 값 ^ (1 << n)으로 토글합니다.

n만큼 왼쪽으로 시프트하면 부호 없는 값에 2의 n제곱을 곱하고, 오른쪽으로 시프트하면 나누므로 컴파일러는 속도 향상을 위해 시프트 연산을 사용합니다.

숫자와 1을 확인해 보세요. 최하위 비트는 홀수일 경우 1, 짝수일 경우 0을 반환하므로 모듈러스 연산자보다 빠릅니다.

임베디드 펌웨어, 드라이버, 암호화, 압축, 그래픽 및 네트워킹은 플래그를 패키징하고, 하드웨어 레지스터를 읽고, 권한 마스크를 구축하고, 산술 연산 속도를 높이기 위해 이를 사용합니다.

Shift 연산자는 관계 연산자보다 더 강력한 결합을 제공하며, &, ^, |는 등호 아래에 있지만 논리 연산자 && 및 || 위에 있으므로 안전을 위해 괄호로 묶는 것이 좋습니다.

네. AI 코딩 도우미는 프롬프트에 따라 마스크와 시프트를 작성하고, 부정 보수를 설명하며, 이진 예제를 작동하는 C 코드로 변환합니다. 결과는 항상 테스트해야 합니다.

GitHub 부조종사 주석에서 비트마스크 매크로, 비트 설정 및 해제 도우미, 시프트 연산 등을 제안합니다. 완성된 내용을 비트 레이아웃과 비교하여 검토하십시오.

이 게시물을 요약하면 다음과 같습니다.