웹사이트 검색

Linux C 프로그래밍 자습서 14부 - 비트 연산자 실제 예제


이 페이지에서

  1. 1. 두 변수의 값 바꾸기
  2. 2. 숫자에서 이진수 1의 수 확인\n
  3. 3. 주어진 비트 위치가 1인지 아닌지 확인하는 C 프로그램\n
  4. 결론

이전 기사 중 하나에서 비트 연산자의 기본 사항에 대해 논의했습니다. 해당 기사를 살펴보고 이제 이러한 연산자의 실제 사용 예를 목격하고 이해할 준비가 되셨기를 바랍니다. 더 이상 고민하지 않고 시작하겠습니다.

1. 두 변수의 값 바꾸기

나는 당신이 두 변수의 값을 교환하는 논리를 알고 있다고 확신합니다. 세 번째 변수를 사용하여 하나의 값을 임시로 저장한 다음 해당 값을 변수 중 하나에 할당합니다(원래 값은 이미 다른 변수에 할당됨).

예를 들어 a와 b가 값을 바꿔야 하는 변수이고 c가 임시 변수인 경우 표준 논리는 다음과 같습니다.

c = a;
a = b;
b = c;

하지만 이 전체 스와핑 프로세스가 비트 연산자를 통해 수행될 수 있다는 사실을 알고 계셨습니까? 예, 맞습니다. 이 경우 논리에는 세 번째 변수가 필요하지 않습니다. 코드는 다음과 같습니다.

#include <stdio.h>

int main()
{
int a, b;

printf("Enter first number: ");
scanf("%d", &a);

printf("Enter second number: ");
scanf("%d", &b);

printf("As per your input, a = %d, and b = %d", a,b);

a = a ^ b;
b = a ^ b;
a = a ^ b;

printf("\nAfter swapping, a = %d, and b = %d", a,b);


return 0;
}

결과는 다음과 같습니다.

Enter first number: 7 
Enter second number: 2
As per your input, a = 7, and b = 2
After swapping, a = 2, and b = 7

2. 숫자에서 이진수 1의 개수 확인

때때로 숫자에서 1로 설정된 비트 수를 세어야 하는 상황에 처할 수 있습니다. 비트 연산자를 사용하여 이 작업을 쉽게 수행할 수 있다는 사실에 기뻐할 것입니다. 논리는 다음과 같습니다.

#include <stdio.h>

int main()
{
int a, num_of_bits = 0;

printf("Enter a number: ");
scanf("%d", &a);

while(a)
{
if(a & 1)
num_of_bits++;

a = a >> 1;
}

printf("\nNumber of binary 1s in this number is %d", num_of_bits);

return 0;
}

결과는 다음과 같습니다.

Enter a number: 5 

Number of binary 1s in this number is 2

3. 주어진 비트 위치가 1인지 여부를 확인하는 C 프로그램

때때로, 특히 컴퓨터 네트워킹(프로토콜 등)과 관련된 코드에서 작업할 때 특정 비트 위치가 1로 설정되어 있는지 여부를 확인해야 합니다. 이는 비트 연산자를 사용하여 쉽게 수행할 수 있습니다.

코드는 다음과 같습니다.

 #include <stdio.h>

int main()
{
int num, position, temp;

printf("Enter a number: ");
scanf("%d", &num);

printf("Enter the bit position (keeping zero as base index and 31 as max): ");
scanf("%d", &position);

if(((num>>position)&1) == 1)
printf("\nBit at the position is 1");
else
printf("\nBit at the position is 0");

return 0;
}

결과는 다음과 같습니다.

Enter a number: 2 
Enter the bit position (keeping zero as base index and 31 as max): 3

Bit at the position is 0

4. 십진수를 이진수로 변환

비트 연산자를 사용하여 10진수를 2진수 형식으로 변환할 수도 있습니다. 이에 대한 하나의 논리가 있습니다.

#include <stdio.h>

int main()
{
int num, i = 0, temp = 0;
int bin[32] = {0}; // this will initialize all array elements to 0

/* Input number from user */
printf("Enter any number: ");
scanf("%d", &num);

for(i =31; i>=0; i--)
{
if((num & 1) == 1)
{
bin[i] = 1;

num = num>>1;
}

printf("The binary form of the number you entered is: ");

for(i=0; i<32; i++)
{
printf("%d",bin[i]);
}

return 0;
}

내 경우의 결과는 다음과 같습니다.

Enter any number: 15 
The binary form of the number you entered is: 00000000000000000000000000001111

결론

여기에 표시된 네 가지 예는 실제 시나리오에서 비트 연산자를 사용할 수 있는 방법에 대한 좋은 아이디어를 제공하기에 충분해야 합니다. 당신의 기계에서 이것을 시도하고, 조정하고, 더 많은 일을 하거나 새로운 일을 하게 하십시오. 의심스럽거나 질문이 있는 경우 여기에 의견을 남겨주세요.