Sunday, May 06, 2007
Perl 펄 비트연산] 특정 비트 쓰기, 1비트씩 저장 함수; Set a Bit, Save a Bit
다음 예제는 정수에서, 지정한 몇번째 비트만 1, 또는 0 으로 설정하는 방법입니다.
setAbit(정수, n번째비트, 값)
의 형식입니다. 세번째 파라미터인 "값"은 0이나 1입니다.
소스 파일명: example.pl
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
실행 결과 화면:
특정 비트 읽기 함수: ▶▶ Perl 펄 비트 연산] 특정 비트 읽기, 1비트씩 추출; Get a Bit, Read a Bit
▶▶ Perl 펄 비트연산] 특정 비트 반전, 1비트씩 역전 함수; Reverse a Bit Function
▶▶ Perl 펄 비트연산] 특정 비트 개수 세기, 1인 비트, 0인 비트 수; Count Bits Function
setAbit(정수, n번째비트, 값)
의 형식입니다. 세번째 파라미터인 "값"은 0이나 1입니다.
16비트 정수, 지정 비트만 켜기/끄기 (ON/OFF) 설정
소스 파일명: example.pl
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#!/usr/bin/perl
use strict; use warnings;
my $num = 0;
printf("%016b\n", $num);
# 출력 결과: 0000000000000000
# 0번 비트 (맨 우측 비트)를 1로 켜기
printf("%016b\n", setAbit($num, 0, 1));
# 0000000000000001
print "\n\n";
# 0000000000000000 에서, 차례로 1비트씩 켜기 (1로 ON)
$num = 0;
for (my $i = 15; $i >= 0; $i--) {
my $temp = setAbit($num, $i, 1);
printf("%016b = %10u\n", $temp, $temp);
}
print "\n\n";
# 1111111111111111 에서, 차례로 1비트씩 끄기 (0으로 OFF)
$num = 0xFFFF;
for (my $i = 15; $i >= 0; $i--) {
my $temp = setAbit($num, $i, 0);
printf("%016b = %10u\n", $temp, $temp);
}
# 정수 $x 의 $n번째 비트를, $b로 설정하는 함수
sub setAbit { # setbit()
my $x = shift;
my $n = shift;
my $b = shift;
return $x | (1 << $n) if ($b == 1);
return $x & (~(1 << $n));
}
use strict; use warnings;
my $num = 0;
printf("%016b\n", $num);
# 출력 결과: 0000000000000000
# 0번 비트 (맨 우측 비트)를 1로 켜기
printf("%016b\n", setAbit($num, 0, 1));
# 0000000000000001
print "\n\n";
# 0000000000000000 에서, 차례로 1비트씩 켜기 (1로 ON)
$num = 0;
for (my $i = 15; $i >= 0; $i--) {
my $temp = setAbit($num, $i, 1);
printf("%016b = %10u\n", $temp, $temp);
}
print "\n\n";
# 1111111111111111 에서, 차례로 1비트씩 끄기 (0으로 OFF)
$num = 0xFFFF;
for (my $i = 15; $i >= 0; $i--) {
my $temp = setAbit($num, $i, 0);
printf("%016b = %10u\n", $temp, $temp);
}
# 정수 $x 의 $n번째 비트를, $b로 설정하는 함수
sub setAbit { # setbit()
my $x = shift;
my $n = shift;
my $b = shift;
return $x | (1 << $n) if ($b == 1);
return $x & (~(1 << $n));
}
실행 결과 화면:
D:\Z>example.pl
0000000000000000
0000000000000001
1000000000000000 = 32768
0100000000000000 = 16384
0010000000000000 = 8192
0001000000000000 = 4096
0000100000000000 = 2048
0000010000000000 = 1024
0000001000000000 = 512
0000000100000000 = 256
0000000010000000 = 128
0000000001000000 = 64
0000000000100000 = 32
0000000000010000 = 16
0000000000001000 = 8
0000000000000100 = 4
0000000000000010 = 2
0000000000000001 = 1
0111111111111111 = 32767
1011111111111111 = 49151
1101111111111111 = 57343
1110111111111111 = 61439
1111011111111111 = 63487
1111101111111111 = 64511
1111110111111111 = 65023
1111111011111111 = 65279
1111111101111111 = 65407
1111111110111111 = 65471
1111111111011111 = 65503
1111111111101111 = 65519
1111111111110111 = 65527
1111111111111011 = 65531
1111111111111101 = 65533
1111111111111110 = 65534
D:\Z>
0000000000000000
0000000000000001
1000000000000000 = 32768
0100000000000000 = 16384
0010000000000000 = 8192
0001000000000000 = 4096
0000100000000000 = 2048
0000010000000000 = 1024
0000001000000000 = 512
0000000100000000 = 256
0000000010000000 = 128
0000000001000000 = 64
0000000000100000 = 32
0000000000010000 = 16
0000000000001000 = 8
0000000000000100 = 4
0000000000000010 = 2
0000000000000001 = 1
0111111111111111 = 32767
1011111111111111 = 49151
1101111111111111 = 57343
1110111111111111 = 61439
1111011111111111 = 63487
1111101111111111 = 64511
1111110111111111 = 65023
1111111011111111 = 65279
1111111101111111 = 65407
1111111110111111 = 65471
1111111111011111 = 65503
1111111111101111 = 65519
1111111111110111 = 65527
1111111111111011 = 65531
1111111111111101 = 65533
1111111111111110 = 65534
D:\Z>
특정 비트 읽기 함수: ▶▶ Perl 펄 비트 연산] 특정 비트 읽기, 1비트씩 추출; Get a Bit, Read a Bit
▶▶ Perl 펄 비트연산] 특정 비트 반전, 1비트씩 역전 함수; Reverse a Bit Function
▶▶ Perl 펄 비트연산] 특정 비트 개수 세기, 1인 비트, 0인 비트 수; Count Bits Function
tag: perl
Perl | 펄
<< Home