[출처 : http://mwultong.blogspot.com/2007/06/c-1-get-bit-read-bit.html]


부호없는 16비트 정수 즉 "unsigned short"형의 숫자에서, 특정 비트가 1인지 0인지를 알아내는 방법입니다. 다음의 getAbit(숫자, 몇번째비트) 함수를 사용하면 0또는 1을 반환합니다. C에는 2진수 출력 기능이 없기에, ushortToBinary() 라는 함수도 만들었습니다.

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;
}

+ Recent posts