^__________________^ 안냥하세여~~~
간만에 잼있는 matlab프로그램 짜본 타이쥐 임돠~~~
이거 의외루 힘드네염~~~
소수점 이하 자리를 2진수로 변환하는거
생각보단 마니 힘들었네염...
일단 아래같이 파일을 만드세염..
파일이름은 dec_to_bin.m으로 함뉘다...
% ======================================
% file name is dec_to_bin.m
% 양(+)의 10진수 실수를 2진수 실수로 변환하는 프로그램
% 음수(-)넣으믄 두겨버린다!!!!
% 왜냐구? 음수(-)넣으믄 무한루프 빠진다..
% 무한루프 빠지믄 욕하지 말구 'Ctrl + C' 눌러라...
% 안그르믄 진짜 컴 따운된다... 경험자가 해주는 말이다!
function bin=dec_to_bin (dec)
% 입력받은 10진수 수를 자연수와 소수점아래수로 나눔
% 그르니깐 쉽게 10.25를 10이랑 0.25랑 나누는 거시염~
dec1=floor(dec); % <--- 요거시 자연수부분
dec2=dec-dec1; % <--- 요거시 당근 소수점부분
% 초기화 해야져~~ 안그르믄 while문에서 에러남뉘다
n=1;
bin1=0;
bin2=0;
% 10진수 자연수 부분을 2진수로 변환합쉐~~~
while dec1~=0,
bin1=bin1+rem(dec1,2)*n;
dec1=floor(dec1/2);
n=n*10;
end
% 10진수 소수점 부분을 2진수로 변환합쉐~~~
n=.1;
while dec2~=0,
dec2=dec2*2;
if dec2>=1
bin2=bin2 + n;
dec2=dec2-1;
end
n=n*.1;
end
% 마지막으루 정수부분과 소수점부분을 합치기!!!
bin=bin1+bin2;
%========================================
그 다음은 매틀랩 command창에서 아래처럼 쳐보세염
dec_to_bin(5.1875)
글믄 아래처럼 결과가 101.0011로 나옴니다..
이게 5.1875를 2진수로 변환한 값이져...
ans =
101.0011
아참, dec_to_bin.m파일이 있는곳에 path지정하는건
아시져? 모르시믄 '오늘 하루~'라는 글목록에서
'path 지정하는법' 설명한거 보시구 참조하세여~~
글구 프로그램에서 floor 하구 rem 명령을 사용했는데
floor는 입력된 수의 정수부분값만 취하는 명령어입니다.
floor(2.9999) 치믄 결과값은 2가되져...
글구 rem은 말그래루 나눠서 나머지값만 취하는 명령이져
rem(5,3) 치믄 5를 3으로 나눠서 나머지값인 2를
결과값으루 내오져...
마지막으루, 10진수 입력을 하는데 소수점이하 수를
이상한 숫자 넣지 마세여... 2를 몇번만 곱해서
1이 떨어지도록 해야함뉘다... 입력을 3.3 같이
0.3을 수십번 곱해도 1이 안나오는건 아마
버려버릴겁뉘다...
(전 이런거 디버깅 몬합뉘다...
이상한 값 넣고 안된다구 구박하지 마세여~~~
프로그램이 아무리 조으믄 모함뉘까? 사용자가 잘써야짐...)
근데 이거 풀믄 답례한다는거 진짜뻥 아니져? ^______^
글믄 수거수거~~~
: 제가 다시한번 글을올리네여..
: 매틀랩초보로서 다시올리는것이니 질책하지말아주세요..
: 제가 10진수를 2진수로 변환하는 식을 사용하려구하는데여..
: 123이라면..
: 1곱하기 2의제곱
: 2곱하기 2의1승
: 3곱하기 2의0승 이렇게 나가는거자나여..
: 아시져??
: 소수점은..예를 들면.....
: 0.45의 경우
: 0.45*2= 0.9+0 여기서 0
: 0.9*2= 0.8+1 여기서 1
: 0.8*2= 0.6+1 여기서 1
: ......
: 이런 식으로 이진법으로는 (0.11...)가 되는 거죠
:
:
: 이런식인데..
: 처음에 어떤수를 입력받을려면 변수가 하나있어야겠구여..
: 만약에 소수점이 없는 정수라면 즉...5라면..
: 5를 2로나눈나머지..1이 2진수의 맨끝자리가 되구여..
: 2로나눈몫인 2를 다시 1로 나누고..
: 이렇게 계속 나누는거아시져??
: 이식을써서 좀도와주세요~~~~~
: 제가 진짜 사례합니다..
다음검색