👩💻/C, C++, STL
[C언어] 비트 연산자와 활용
글로랴
2021. 6. 30. 20:09
📌 비트 연산자
연산자 | 기능 | ect |
& | AND 연산 | |
| | OR 연산 | |
^ | XOR 연산 | |
~ | NOT 연산 | 피연산자가 '-1'일 때 '0'을 반환 |
<< | A << B 'A 비트 열을 B 크기만큼 왼쪽으로 이동' |
2의 배수 곱셈 |
>> | A >> B 'A 비트 열을 B 크기만큼 오른쪽으로 이동' |
2의 배수 나눗셈 |
🔍 프로그램 사용자로부터 정수 값을 하나 입력 받는다. 그리고 이렇게 입력된 값의 비트 열을 출력하는 프로그램을 작성해 보자. 단, 입력되는 정수는 int형으로 읽어 들이는 것을 원칙으로 한다. 따라서 int를 4byte로 표현하는 시스템에서는 1이 입력되면 출력 결과가 다음과 같아야 한다. (8bit 씩 끊어서 출력해야 함.)
00000000 00000000 00000000 00000001
#include <stdio.h>
int main()
{
int num;
int intLen, i;
intLen = sizeof(int) * 8;
printf("정수 입력 : ");
scanf("%d", &num);
printf("입력된 수의 비트 열 : ");
for (i = 0; i < intLen; i++)
{
if (i != 0 && i % 8 == 0)
printf(" ");
printf("%d", num >> ((intLen - 1) - i) & 1);
}
printf("\n");
return 0;
}
📌 비트 마스크
: 설정할 정보가 많은 상황에서 사용.
#include <stdio.h>
const int KIND=1; /* 00000001 */
const int ADD=2; /* 00000010 */
const int MIN=4; /* 00000100 */
int opStatus;
void SetShowStatus(int ste);
void ShowOperationResult(int n1, int n2);
int main(void)
{
SetShowStatus(KIND | ADD | MIN); // 00000111
printf("Number 1 \n");
ShowOperationResult(5, 2);
printf("\n");
SetShowStatus(ADD | MIN); //00000110
printf("Number 2 \n");
ShowOperationResult(4, 3);
printf("\n");
return 0;
}
void SetShowStatus(int ste)
{
opStatus=ste;
}
void ShowOperationResult(int n1, int n2)
{
if(opStatus & KIND)
{
if(opStatus & ADD)
printf("%d와 %d의 합은 %d입니다. \n", n1, n2, n1+n2);
if(opStatus & MIN)
printf("%d와 %d의 차는 %d입니다. \n", n1, n2, n1-n2);
}
else
{
if(opStatus & ADD)
printf("%d + %d = %d \n", n1, n2, n1+n2);
if(opStatus & MIN)
printf("%d - %d = %d \n", n1, n2, n1-n2);
}
}
반응형