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
☞ Perl (펄)
아래 예제의 함수를
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
☞ Perl (펄)
Post a Comment
<< Home