변수 num에 저장되어 있는 0x02의 값.
bit1이 1인 경우와 0인 경우에 따라 다른 함수를 실행시키고 싶다면????
if ((num & 0x02) >> 1)
MachineEnable();
else
Machinesleep();
입력받는 num값이 0x02라면 AND연산을 실행해서 나오는 값이 0x00000010 이 되므로 그것을 옆으로 한칸 시프트 연산을 해주면 MachineEnable이 되는 것이다. 하지만 0x04가 들어가게 되면 AND 연산이 되는 부분이 없으로 0이되고 0을 옆으로 1비트 이동한다고 해도 0이 된다. 즉 MachineSleep 함수 호출이 된다.
C언어에서 비트 단위로 데이터를 나누어 사용하려면 먼저 구조체의 '힝목_이름' 옆에 ':'를 한 후에 숫자를 적어주면 해당 항목은 그 만큼의 비트 수를 갖는다.
struct _bit{
unsigned char B0 : 1;
unsigned char B1 : 1;
unsigned char B2 : 1;
unsigned char B3 : 1;
unsigned char B4 : 1;
unsigned char B5 : 1;
unsigned char B6 : 1;
unsigned char B7 : 1;
}bit;
구조체 bit의 항목 B0부터 B7까지는 모두 1비트씩의 공간을 갖게 되는 것.
위와 같은 경우에는 if문을 다음과 같이 사용할 수 있다.
if(bit.B1 ==1 )
MachineEnable();
else
MachineSleep();
#include <stdio.h>
typedef union _BYTE
{
unsigned char byte; //공용체에서 변수 byte와 밑의 구조체 bit는 같은 메로리를 사용.
struct _bit
{
unsigned char B0 : 1;
unsigned char B1 : 1;
unsigned char B2 : 1;
unsigned char B3 : 1;
unsigned char B4 : 1;
unsigned char B5 : 1;
unsigned char B6 : 1;
unsigned char B7 : 1;
} bit;
}BYTE;
int main()
{
BYTE data;
printf("0부터 255까지의 값을 입력해보세요.\n");
printf("입력한 10진수 값을 2진수로 바꾸어서 출력합니다.\n");
printf("[10진수] :");
scanf("%d", &data.byte); //공용체이므로 byte에 저장되도 구조체 bit에 저장되는 것.
printf("입력한 10진수 값을 2진수로 변경하면 다음과 같습니다.\n");
printf("%d", data.bit.B7);
printf("%d", data.bit.B6);
printf("%d", data.bit.B5);
printf("%d", data.bit.B4);
printf("%d", data.bit.B3);
printf("%d", data.bit.B2);
printf("%d", data.bit.B1);
printf("%d", data.bit.B0);
printf("\n");
}
공용체는 두 개 이상의 자료형이 같은 메모리 공간을 사용하므로 바이트와 비트연산과 같은 기능을 구현하기에 적합하다.
'About 프로그래밍!!! > C언어 무따기 정리' 카테고리의 다른 글
[C언어 무따기]단어개수 구하기 (0) | 2010.08.07 |
---|---|
[무따기C] 별 사선으로 찍기 (0) | 2010.07.31 |
[무따기 C언어] 공용체의 실무응용 (0) | 2010.06.27 |
[무따기 C언어] 공용체 (0) | 2010.06.27 |
[무따기 C언어]구조체 포인터 사용. (0) | 2010.06.26 |