mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Saturday, June 16, 2007

C언어 비트 연산] 특정 비트 읽기, 1비트씩 추출; Get a Bit, Read a Bit


부호없는 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;
}



▶▶ C언어 비트 연산] 특정 비트 켜기 끄기 함수, Bit ON OFF; Set a Bit, Save a Bit




tag: cpp
C언어 | C/C++ (Visual C++)

2 Comments:
At February 8, 2021 at 3:35 PM, Blogger 614 said...

저 코드 실행되지가 않는데요..?
#incloud 에 뭔가 추가해야 될거 같은데...

 
At February 8, 2021 at 8:11 PM, Blogger mwultong said...


위의 소스는
Visual C++ 2005 Express SP1 (32bit) + Microsoft Platform SDK
로 작성된 것입니다.

아주 간단한 소스이기에 어떤 컴파일러에서도 잘 작동되어야 하는데, 이상하군요.

위의 C소스에서 사용된 'C 표준 라이브러리 함수'는 printf() 하나뿐이기 때문에 #include 는 printf() 함수가 정의된 stdio.h 로 충분합니다.


#incloud 라고 쓰시면 오타이니까 당연히 에러가 나구요

#include 라고 써 보세요.

 

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top