Wednesday, April 18, 2007
Perl 펄] signed int를 unsigned형 정수로 변환 캐스팅 함수
펄의 자료형에는 signed, unsigned의 구분이 없지만, 어떤 마이너스 정수 값을, C언어의 unsigned형처럼 변환해 주어야 할 때가 있습니다.
가령 -1을 unsigned형으로 표현하면 4294967295 가 됩니다.
아래 예제의 unsigned32() 같은 비트 연산 함수를 사용하면 구현할 수 있습니다.
파일명: example.pl
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
▶▶ Perl 펄] printf 함수 %u %d 의미/뜻, unsigned int, signed int 변환 출력
참고: ▶▶ C 언어] signed int 를, unsigned int 로 상호 변환, 캐스팅
가령 -1을 unsigned형으로 표현하면 4294967295 가 됩니다.
아래 예제의 unsigned32() 같은 비트 연산 함수를 사용하면 구현할 수 있습니다.
음수 -1을, 4294967295(0xFFFFFFFF)로 변환 예제
파일명: example.pl
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#!/usr/bin/perl
use strict; use warnings;
# 변환 테스트 시작
print unsigned32(-1), "\n"; # 4294967295
print unsigned32(-2), "\n"; # 4294967294
print unsigned32(1), "\n"; # 1
print unsigned32(0), "\n"; # 0
print unsigned32(0xFFFFFFFF), "\n"; # 4294967295 (부호없는 32비트 int형의 최대값)
print unsigned32(0x7FFFFFFF), "\n"; # 2147483647 (부호있는 32비트 int형의 최대값)
print unsigned32(0x7FFFFFFF - 1), "\n"; # 2147483646
print unsigned32(0x7FFFFFFF + 1), "\n"; # 2147483648
# 변환 함수
sub unsigned32 {
return $_[0] & 0xFFFFFFFF;
}
# 이 방법은 문자열로 변환 후, 다시 숫자로 출력하는 방법인데
# 좀 비효율적이라 생각됨
my $i = -1;
$i = sprintf("%u\n", $i);
print $i, "\n";
use strict; use warnings;
# 변환 테스트 시작
print unsigned32(-1), "\n"; # 4294967295
print unsigned32(-2), "\n"; # 4294967294
print unsigned32(1), "\n"; # 1
print unsigned32(0), "\n"; # 0
print unsigned32(0xFFFFFFFF), "\n"; # 4294967295 (부호없는 32비트 int형의 최대값)
print unsigned32(0x7FFFFFFF), "\n"; # 2147483647 (부호있는 32비트 int형의 최대값)
print unsigned32(0x7FFFFFFF - 1), "\n"; # 2147483646
print unsigned32(0x7FFFFFFF + 1), "\n"; # 2147483648
# 변환 함수
sub unsigned32 {
return $_[0] & 0xFFFFFFFF;
}
# 이 방법은 문자열로 변환 후, 다시 숫자로 출력하는 방법인데
# 좀 비효율적이라 생각됨
my $i = -1;
$i = sprintf("%u\n", $i);
print $i, "\n";
▶▶ Perl 펄] printf 함수 %u %d 의미/뜻, unsigned int, signed int 변환 출력
참고: ▶▶ C 언어] signed int 를, unsigned int 로 상호 변환, 캐스팅
tag: perl
Perl | 펄
<< Home