Sunday, May 06, 2007
Perl 펄 비트연산] 특정 비트 반전, 1비트씩 역전 함수; Reverse a Bit Function
정수의 특정 비트의 값을 다른 값으로 뒤집는 방법입니다. 지정한 몇번째 비트의 값이 0이라면 1로, 1이라면 0으로 바꾸는 것입니다.
아래 예제의 함수를
reverseAbit(정수, n번째비트)
이런 형식으로 사용하면 됩니다.
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
실행 결과 화면:
맨 우측 비트가 0번 비트입니다.
▶▶ Perl 펄 비트 연산] 특정 비트 읽기, 1비트씩 추출; Get a Bit, Read a Bit
▶▶ Perl 펄 비트연산] 특정 비트 쓰기, 1비트씩 저장 함수; Set a Bit, Save a Bit
▶▶ Perl 펄 비트연산] 특정 비트 개수 세기, 1인 비트, 0인 비트 수; Count Bits Function
아래 예제의 함수를
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);
}
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>
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 | 펄
<< Home