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

 
Monday, May 07, 2007

Perl 펄 비트연산] 특정 비트 개수 세기, 1인 비트, 0인 비트 수; Count Bits Function


데이터를 이진수로 표현하면 "0인 비트"와 "1인 비트" 두 가지가 있습니다. 아래의 countBits() 함수/서브루틴에, 정수를 넣어주면, 그 숫자에서 1인 비트 즉 켜져 있는 비트의 개수만을 구합니다. 0인 비트의 숫자를 구하려면 그 자료형의 총 비트수에서 1인 비트의 수를 빼주면 됩니다.

다음 예제에서는 숫자를 "부호 없는 16비트 정수형" 즉, "unsigned short" 으로 간주했습니다.

0, 1비트 숫자 구하기 함수 예제


파일명: example.pl
#!/usr/bin/perl
use strict; use warnings;

  my ($num, $c);


  $num = 0; $c = countBits($num);
  printf("%016b = %10u : [1s = %2d]  [0s = %2d]\n", $num, $num, $c, 16 - $c);


  $num = 1; $c = countBits($num);
  printf("%016b = %10u : [1s = %2d]  [0s = %2d]\n", $num, $num, $c, 16 - $c);


  $num = 0xff; $c = countBits($num);
  printf("%016b = %10u : [1s = %2d]  [0s = %2d]\n", $num, $num, $c, 16 - $c);


  $num = 0xffff; $c = countBits($num);
  printf("%016b = %10u : [1s = %2d]  [0s = %2d]\n", $num, $num, $c, 16 - $c);


  $num = 0b1010101010101010; $c = countBits($num);
  printf("%016b = %10u : [1s = %2d]  [0s = %2d]\n", $num, $num, $c, 16 - $c);


  $num = 0b0101010101010101; $c = countBits($num);
  printf("%016b = %10u : [1s = %2d]  [0s = %2d]\n", $num, $num, $c, 16 - $c);

  $num = 61547; $c = countBits($num);
  printf("%016b = %10u : [1s = %2d]  [0s = %2d]\n", $num, $num, $c, 16 - $c);




sub countBits {
  my $x = shift;
  my $count = 0;

  while ($x != 0) {
    $x &= $x - 1;
    $count++;
  }
  return $count;
}



실행 결과 화면:
D:\Z>example.pl
0000000000000000 =          0 : [1s =  0]  [0s = 16]
0000000000000001 =          1 : [1s =  1]  [0s = 15]
0000000011111111 =        255 : [1s =  8]  [0s =  8]
1111111111111111 =      65535 : [1s = 16]  [0s =  0]
1010101010101010 =      43690 : [1s =  8]  [0s =  8]
0101010101010101 =      21845 : [1s =  8]  [0s =  8]
1111000001101011 =      61547 : [1s =  9]  [0s =  7]

D:\Z>



▶▶ Perl 펄 비트 연산] 특정 비트 읽기, 1비트씩 추출; Get a Bit, Read a Bit

▶▶ Perl 펄 비트연산] 특정 비트 쓰기, 1비트씩 저장 함수; Set a Bit, Save a Bit

▶▶ Perl 펄 비트연산] 특정 비트 반전, 1비트씩 역전 함수; Reverse a Bit Function

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

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