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

 
Previous Post J-POP, 일본 CF 동영상; YAMASHITA KUMIKO 야마시타 구미코의 JPOP필름국의 카메라용 브러쉬 버리다, 중국제 솔; Camera Brush실내 야경 사진 촬영, 디카 장시간 노출 25초; 니콘 D40X Nocturne중앙값이란? 통계에서 중간값, 메디안의 의미; Median한국 여자 평균 신장, 20대 30대 여성 키 통계 표; F Stature Stat카메라용 건조제, 방습제, 실리카겔 구입기; Camera SilicagelC언어 비트 연산] 특정 비트 읽기, 1비트씩 추출; Get a Bit, Read a Bi...S.E.S 농심 새우깡 CF 동영상 SES 슈; (화질 문제 있음)PHP 큰따옴표, 작은따옴표 표현 방법, 따옴표 차이점; Quotes구글 파일 검색법, 특정 확장자 파일만 검색 방법; Google File Search

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

Sunday, June 17, 2007

부호없는 16비트 정수 즉 "unsigned short"형 숫자에서 특정 비트를 켜고 끄는 방법입니다. 아래의 "setAbit(숫자, 몇번째비트, 1또는0)" 함수를 사용하면 됩니다. 특정 비트를 1또는 0으로 설정한 후, 그 결과를 다시 "unsigned short"으로 반환합니다. 따라서 이 함수로, 어떤 숫자를 비트 단위로 조작할 수 있습니다.

특정 비트 조작, 1 또는 0으로


소스 파일명: example.cpp
#include <stdio.h>

unsigned short setAbit(unsigned short x, int n, int b);
char *ushortToBinary(unsigned short i);


int main(void) {

  unsigned short num = 0;
  printf("%s\n", ushortToBinary(num));
  // 2진수 출력 결과: 0000000000000000


  // 0번 비트 (맨 우측 비트)를 1로 켜기
  printf("%s\n", ushortToBinary( setAbit(num, 0, 1) ));
  // 0000000000000001



  printf("\n\n");
  // 0000000000000000 에서, 차례로 1비트씩 켜기 (1로 ON)
  num = 0;
  for (int i = 15; i >= 0; i--) {
    unsigned short temp = setAbit(num, i, 1);
    printf("%s = %10u\n", ushortToBinary(temp), temp);
  }


  printf("\n\n");
  // 1111111111111111 에서, 차례로 1비트씩 끄기 (0으로 OFF)
  num = 0xFFFF;
  for (int i = 15; i >= 0; i--) {
    unsigned short temp = setAbit(num, i, 0);
    printf("%s = %10u\n", ushortToBinary(temp), temp);
  }


  return 0;
}




// 정수 x 의 n번째 비트를, b로 설정하는 함수
unsigned short setAbit(unsigned short x, int n, int b) { // setbit()

  if (b == 1)
    return (unsigned short) (
                             x | (1 << n)
                             );

  return (unsigned short) (
                           x & (~(1 << 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;
}



컴파일 및 실행 결과 화면:
D:\Z>cl example.cpp && example.exe
example.cpp
0000000000000000
0000000000000001


1000000000000000 =      32768
0100000000000000 =      16384
0010000000000000 =       8192
0001000000000000 =       4096
0000100000000000 =       2048
0000010000000000 =       1024
0000001000000000 =        512
0000000100000000 =        256
0000000010000000 =        128
0000000001000000 =         64
0000000000100000 =         32
0000000000010000 =         16
0000000000001000 =          8
0000000000000100 =          4
0000000000000010 =          2
0000000000000001 =          1


0111111111111111 =      32767
1011111111111111 =      49151
1101111111111111 =      57343
1110111111111111 =      61439
1111011111111111 =      63487
1111101111111111 =      64511
1111110111111111 =      65023
1111111011111111 =      65279
1111111101111111 =      65407
1111111110111111 =      65471
1111111111011111 =      65503
1111111111101111 =      65519
1111111111110111 =      65527
1111111111111011 =      65531
1111111111111101 =      65533
1111111111111110 =      65534
D:\Z>



위와는 반대로, 특정 비트가 켜져 있는지 아닌지 알아내기: ▶▶ C언어 비트 연산] 특정 비트 읽기, 1비트씩 추출; Get a Bit, Read a Bit

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

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