[출처 : http://mwultong.blogspot.com/2007/06/c-1-get-bit-read-bit.html]
부호없는 16비트 정수 즉 "unsigned short"형의 숫자에서, 특정 비트가 1인지 0인지를 알아내는 방법입니다. 다음의 getAbit(숫자, 몇번째비트) 함수를 사용하면 0또는 1을 반환합니다. C에는 2진수 출력 기능이 없기에, ushortToBinary() 라는 함수도 만들었습니다.
소스 파일명: example.cpp
n번째 비트, 1인지 0인지 여부 판단 함수 예제
소스 파일명: example.cpp
#include <stdio.h>
int getAbit(unsigned short x, int n);
char *ushortToBinary(unsigned short i);
int main(void) {
unsigned short num = 24761;
printf("%s\n", ushortToBinary(num)); // 2진수로 출력
// 출력 결과: 0110000010111001
// 0번 비트 (맨 우측 비트) 읽기
printf("%d\n", getAbit(num, 0));
// 1
// 1번 비트 (맨 우측에서 2번째 비트) 읽기
printf("%d\n", getAbit(num, 1));
// 0
// num을 1비트씩 읽어, 2진수로 출력하기
printf("\n[ ");
for (int i = 15; i >= 0; i--) {
printf("%d", getAbit(num, i));
}
printf(" ]\n");
// [ 0110000010111001 ]
return 0;
}
// 지정한 정수에서, 몇번째 비트만 읽어서 반환하는 함수
int getAbit(unsigned short x, int n) { // getbit()
return (x & (1 << n)) >> n;
}
// 16비트 정수를 2진수 문자열로 변환 함수
char *ushortToBinary(unsigned short i) {
static char s[16 + 1] = { '0', };
int count = 16;
do { s[--count] = '0' + (char) (i & 1);
i = i >> 1;
} while (count);
return s;
}
int getAbit(unsigned short x, int n);
char *ushortToBinary(unsigned short i);
int main(void) {
unsigned short num = 24761;
printf("%s\n", ushortToBinary(num)); // 2진수로 출력
// 출력 결과: 0110000010111001
// 0번 비트 (맨 우측 비트) 읽기
printf("%d\n", getAbit(num, 0));
// 1
// 1번 비트 (맨 우측에서 2번째 비트) 읽기
printf("%d\n", getAbit(num, 1));
// 0
// num을 1비트씩 읽어, 2진수로 출력하기
printf("\n[ ");
for (int i = 15; i >= 0; i--) {
printf("%d", getAbit(num, i));
}
printf(" ]\n");
// [ 0110000010111001 ]
return 0;
}
// 지정한 정수에서, 몇번째 비트만 읽어서 반환하는 함수
int getAbit(unsigned short x, int n) { // getbit()
return (x & (1 << n)) >> n;
}
// 16비트 정수를 2진수 문자열로 변환 함수
char *ushortToBinary(unsigned short i) {
static char s[16 + 1] = { '0', };
int count = 16;
do { s[--count] = '0' + (char) (i & 1);
i = i >> 1;
} while (count);
return s;
}