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

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

 
Sunday, May 06, 2007

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


정수의 특정 비트의 값을 다른 값으로 뒤집는 방법입니다. 지정한 몇번째 비트의 값이 0이라면 1로, 1이라면 0으로 바꾸는 것입니다.

아래 예제의 함수를
reverseAbit(정수, n번째비트)
이런 형식으로 사용하면 됩니다.

16비트 정수, n번째 비트 값 뒤집기 예제


※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#!/usr/bin/perl
use strict; use warnings;

  my $num = 0xFF;
  printf("                   %016b <= 원본 숫자\n", $num);


  print "\n";


  for (my $i = 0; $i <= 15; $i++) {
    my $temp = reverseAbit($num, $i);
    printf("[%2d번째 비트 토글] %016b = %10u\n", $i, $temp, $temp);
  }



# $x 의 $n번째 비트의 값을 뒤집는 함수
sub reverseAbit { # reversebit()
  my $x = shift;
  my $n = shift;

  return $x ^= (1 << $n);
}



실행 결과 화면:
D:\Z>example.pl
                   0000000011111111 <= 원본 숫자

[ 0번째 비트 토글] 0000000011111110 =        254
[ 1번째 비트 토글] 0000000011111101 =        253
[ 2번째 비트 토글] 0000000011111011 =        251
[ 3번째 비트 토글] 0000000011110111 =        247
[ 4번째 비트 토글] 0000000011101111 =        239
[ 5번째 비트 토글] 0000000011011111 =        223
[ 6번째 비트 토글] 0000000010111111 =        191
[ 7번째 비트 토글] 0000000001111111 =        127
[ 8번째 비트 토글] 0000000111111111 =        511
[ 9번째 비트 토글] 0000001011111111 =        767
[10번째 비트 토글] 0000010011111111 =       1279
[11번째 비트 토글] 0000100011111111 =       2303
[12번째 비트 토글] 0001000011111111 =       4351
[13번째 비트 토글] 0010000011111111 =       8447
[14번째 비트 토글] 0100000011111111 =      16639
[15번째 비트 토글] 1000000011111111 =      33023

D:\Z>

맨 우측 비트가 0번 비트입니다.


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

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

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




tag: perl
Perl | 펄

0 Comments:

<< Home RSS 2.0 feed

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