Monday, September 18, 2006
펄/Perl] 2진수 변환/출력, 10진수를 이진수로 - printf 함수 - Binary
이진수를 영어로는 binary 또는 base-2 라고 합니다.
다음과 같은 방법으로 이진수를 변환 출력할 수 있습니다.
printf 함수에 "%b" 이런 포맷을 사용하면, 10진수/16진수 등이, 2진수로 출력됩니다.
펄에서, 2진수 상수는 앞에 0b 이런 문자열이 붙습니다. 제로+소문자b 입니다. 포맷 속에 샤프(#) 를 사용하면 자동으로 0b 가 붙습니다. 펄의 주석 기호도 #인데 좀 혼란스럽군요. 그렇지만 펄은 그런 혼란을 즐기는 언어이겠지요.
펄의 변수에는 정수 실수 구분도 없고, 8비트 정수니 16비트 정수니 하는 것도 없습니다. 따라서 어떤 숫자를 몇 비트 이진수로 변환할 것인지 지정해 주어야 합니다.
"%032b" 이런 포맷을 사용하면, 그 숫자를 32비트 정수로 간주하여 이진수로 출력하고, 앞의 빈자리는 0으로 채웁니다.
숫자 1을, 32비트 이진수로 바꾸면
00000000000000000000000000000001
이렇게 나옵니다.
▶▶ 펄/Perl] 10진수를 16진수(헥사;Hex)로 출력/변환 함수와 방법
16진법 2진법 10진수, 아스키 유니코드 상호 변환기: ▶▶ 16진수 헥사, 2진수, 10진수, 8진법 변환 계산기; Hex Calc
다음과 같은 방법으로 이진수를 변환 출력할 수 있습니다.
10진수/16진수를 2진수로 변환 출력 예제
#!/usr/bin/perl
use strict; use warnings;
########################################################################
# 8비트 2진수
########################################################################
# 8비트 최대값: 255 = 0xFF (2진수를 다룰 때는 이렇게 16진수를 사용하는 것이 편리합니다.)
printf "%b\n", 0xFF; # 출력: 11111111
printf "%#b\n", 0xFF; # 출력: 0b11111111
# 최소값인 0을 출력
printf "%08b\n", 0; # 출력: 00000000
########################################################################
# 16비트 2진수
########################################################################
# 16비트 최대값: 65535 = 0xFFFF
printf "%016b\n", 0xFFFF; # 출력: 1111111111111111
printf "%#016b\n", 0xFFFF; # 출력: 0b1111111111111111
# 최소값인 0을 출력
printf "%016b\n", 0; # 출력: 0000000000000000
########################################################################
# 32비트 2진수
########################################################################
# 32비트 최대값: 4294967295 = 0xFFFFFFFF
printf "%032b\n", 0xFFFFFFFF; # 출력: 11111111111111111111111111111111
printf "%#032b\n", 0xFFFFFFFF; # 출력: 0b11111111111111111111111111111111
# 최소값인 0을 출력
printf "%#032b\n", 0x00000000; # 출력: 00000000000000000000000000000000
########################################################################
# 테스트
########################################################################
# 십진수 525323232 를 이진수로
printf "%032b\n", 525323232; # 출력: 00011111010011111100101111100000
my $s = sprintf "%032b\n", 525323232; # 2진수 문자열로 변환
print $s, "\n"; # 변환 후 출력
use strict; use warnings;
########################################################################
# 8비트 2진수
########################################################################
# 8비트 최대값: 255 = 0xFF (2진수를 다룰 때는 이렇게 16진수를 사용하는 것이 편리합니다.)
printf "%b\n", 0xFF; # 출력: 11111111
printf "%#b\n", 0xFF; # 출력: 0b11111111
# 최소값인 0을 출력
printf "%08b\n", 0; # 출력: 00000000
########################################################################
# 16비트 2진수
########################################################################
# 16비트 최대값: 65535 = 0xFFFF
printf "%016b\n", 0xFFFF; # 출력: 1111111111111111
printf "%#016b\n", 0xFFFF; # 출력: 0b1111111111111111
# 최소값인 0을 출력
printf "%016b\n", 0; # 출력: 0000000000000000
########################################################################
# 32비트 2진수
########################################################################
# 32비트 최대값: 4294967295 = 0xFFFFFFFF
printf "%032b\n", 0xFFFFFFFF; # 출력: 11111111111111111111111111111111
printf "%#032b\n", 0xFFFFFFFF; # 출력: 0b11111111111111111111111111111111
# 최소값인 0을 출력
printf "%#032b\n", 0x00000000; # 출력: 00000000000000000000000000000000
########################################################################
# 테스트
########################################################################
# 십진수 525323232 를 이진수로
printf "%032b\n", 525323232; # 출력: 00011111010011111100101111100000
my $s = sprintf "%032b\n", 525323232; # 2진수 문자열로 변환
print $s, "\n"; # 변환 후 출력
printf 함수에 "%b" 이런 포맷을 사용하면, 10진수/16진수 등이, 2진수로 출력됩니다.
펄에서, 2진수 상수는 앞에 0b 이런 문자열이 붙습니다. 제로+소문자b 입니다. 포맷 속에 샤프(#) 를 사용하면 자동으로 0b 가 붙습니다. 펄의 주석 기호도 #인데 좀 혼란스럽군요. 그렇지만 펄은 그런 혼란을 즐기는 언어이겠지요.
펄의 변수에는 정수 실수 구분도 없고, 8비트 정수니 16비트 정수니 하는 것도 없습니다. 따라서 어떤 숫자를 몇 비트 이진수로 변환할 것인지 지정해 주어야 합니다.
"%032b" 이런 포맷을 사용하면, 그 숫자를 32비트 정수로 간주하여 이진수로 출력하고, 앞의 빈자리는 0으로 채웁니다.
숫자 1을, 32비트 이진수로 바꾸면
00000000000000000000000000000001
이렇게 나옵니다.
▶▶ 펄/Perl] 10진수를 16진수(헥사;Hex)로 출력/변환 함수와 방법
16진법 2진법 10진수, 아스키 유니코드 상호 변환기: ▶▶ 16진수 헥사, 2진수, 10진수, 8진법 변환 계산기; Hex Calc
tag: perl
Perl | 펄
<< Home