산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C의 비트 연산자:AND, OR, XOR, 시프트 및 보수

비트 연산자란 무엇입니까?

비트 연산자 비트 레벨 프로그래밍이라고도 하는 비트 레벨에서 데이터를 조작하는 데 사용됩니다. Bitwise는 개별 비트 수준에서 하나 이상의 비트 패턴 또는 이진수에 대해 작동합니다. 계산 프로세스를 더 빠르게 하기 위해 수치 계산에 사용됩니다.

다음은 'C' 프로그래밍 언어에서 제공하는 비트 연산자 목록입니다.

연산자 의미 & 비트 AND 연산자| 비트 OR 연산자^ 비트 배타적 OR 연산자~ 이진 1의 보수 연산자는 단항 연산자입니다.<< 왼쪽 시프트 연산자>> 오른쪽 시프트 연산자


비트 연산자는 float, double 등과 같은 기본 데이터 유형에 직접 적용할 수 없습니다. 비트 연산자는 호환성 때문에 정수 데이터 유형과 함께 주로 사용된다는 점을 항상 기억하십시오.

비트 논리 연산자는 최하위 비트, 즉 가장 오른쪽 비트인 LSB 비트부터 시작하여 가장 왼쪽 비트인 MSB(Most Significant Bit) 쪽으로 작업하여 비트 단위로 데이터에 대해 작업합니다.

비트 논리 연산자의 계산 결과는 아래 표와 같습니다.

x x 및 y x | y x ^ y 0 00000 10111 00111 1110

이 튜토리얼에서는 배우게 될 것입니다-

비트 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

기호(^)로 표시됩니다. (^) 연산자의 양쪽에 두 개의 정수 표현식이 작성됩니다.

표현식 중 하나만 값이 1인 경우 비트 배타적 OR 연산의 결과는 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'개의 비트를 왼쪽으로 시프트합니다. 표현식의 가장 왼쪽 비트가 튀어 나오고 값이 0인 n 비트가 오른쪽에 채워집니다.

오른쪽 시프트 연산은 'n'개의 비트를 오른쪽으로 시프트합니다. 표현식의 가장 오른쪽 'n' 비트가 튀어나오고 값 0이 왼쪽에 채워집니다.

예:x는 데이터가 1111인 정수 표현식입니다. 시프트 연산을 수행한 후 결과는 다음과 같습니다.

x << 2 (left shift) = 1111<<2 = 1100
x>>2 (right shift) = 1111>>2 = 0011

Shifts 연산자를 결합한 다음 정수 표현식에서 데이터를 추출하는 데 사용할 수 있습니다. 비트 시프트 연산자의 사용을 보여주는 프로그램을 작성해 보겠습니다.

#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입니다.

오른쪽 시프트 연산을 수행한 후 값은 000101에 해당하는 이진 값이 5가 됩니다.

비트 보수 연산자

비트 보수는 항상 하나의 값 또는 피연산자만 취하기 때문에 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

요약


C 언어

  1. C# 클래스 및 개체
  2. C# 추상 클래스 및 메서드
  3. C# 부분 클래스 및 부분 메서드
  4. C# 봉인된 클래스 및 메서드
  5. C++ 연산자
  6. C 키워드 및 식별자
  7. C 프로그래밍 연산자
  8. IoT 및 블록체인 – 패러다임 전환
  9. 예제가 있는 C++의 연산자:정의, 유형 및 프로그램
  10. Python 연산자:산술, 논리, 비교, 할당, 비트 및 우선 순위