Sunday, May 06, 2007
Perl 펄 비트 연산] 특정 비트 읽기, 1비트씩 추출; Get a Bit, Read a Bit
복잡한 프로그램이나, 데이터베이스 등에서는 메모리를 절약하기 위해, 비트 단위로 자료를 저장하는 경우가 많습니다. 예를 들어 32비트 정수형 변수 하나를 선언해 놓으면, 비트가 32개 있으니 32개의 불린형 자료를 한꺼번에 차곡차곡 저장할 수 있습니다. 이런 경우에, 저장한 데이터를 비트 단위로 읽는 방법입니다.
다음 예제 속의 getAbit(정수, n번째비트) 함수를 사용합니다.
소스 파일명: example.pl
특정 비트 쓰기 함수: ▶▶ Perl 펄 비트연산] 특정 비트 쓰기, 1비트씩 저장 함수; Set a Bit, Save a Bit
▶▶ Perl 펄 비트연산] 특정 비트 반전, 1비트씩 역전 함수; Reverse a Bit Function
▶▶ Perl 펄 비트연산] 특정 비트 개수 세기, 1인 비트, 0인 비트 수; Count Bits Function
다음 예제 속의 getAbit(정수, n번째비트) 함수를 사용합니다.
16비트 정수에서 지정 비트만 구하기 예제
소스 파일명: example.pl
#!/usr/bin/perl
use strict; use warnings;
my $num = 24761;
printf("%016b\n", $num); # 2진수로 출력
# 출력 결과: 0110000010111001
# 0번 비트 (맨 우측 비트) 읽기
printf("%d\n", getAbit($num, 0));
# 1
# 1번 비트 (맨 우측에서 2번째 비트) 읽기
printf("%d\n", getAbit($num, 1));
# 0
# $num을 1비트씩 읽어, 2진수로 출력하기
print "\n[ ";
for (my $i = 15; $i >= 0; $i--) {
printf("%d", getAbit($num, $i));
}
print " ]\n";
# [ 0110000010111001 ]
# 특정 정수에서, 몇번째 비트만 읽어서 반환하는 함수
sub getAbit { # getbit()
return ($_[0] & (1 << $_[1])) >> $_[1];
}
use strict; use warnings;
my $num = 24761;
printf("%016b\n", $num); # 2진수로 출력
# 출력 결과: 0110000010111001
# 0번 비트 (맨 우측 비트) 읽기
printf("%d\n", getAbit($num, 0));
# 1
# 1번 비트 (맨 우측에서 2번째 비트) 읽기
printf("%d\n", getAbit($num, 1));
# 0
# $num을 1비트씩 읽어, 2진수로 출력하기
print "\n[ ";
for (my $i = 15; $i >= 0; $i--) {
printf("%d", getAbit($num, $i));
}
print " ]\n";
# [ 0110000010111001 ]
# 특정 정수에서, 몇번째 비트만 읽어서 반환하는 함수
sub getAbit { # getbit()
return ($_[0] & (1 << $_[1])) >> $_[1];
}
특정 비트 쓰기 함수: ▶▶ Perl 펄 비트연산] 특정 비트 쓰기, 1비트씩 저장 함수; Set a Bit, Save a Bit
▶▶ Perl 펄 비트연산] 특정 비트 반전, 1비트씩 역전 함수; Reverse a Bit Function
▶▶ Perl 펄 비트연산] 특정 비트 개수 세기, 1인 비트, 0인 비트 수; Count Bits Function
tag: perl
Perl | 펄
<< Home