Converting binary to decimal and vice versa, please help!!

조회 수: 6 (최근 30일)
SB
SB 2012년 11월 2일
편집: KSSV 2019년 10월 23일
I'm having trouble converting strings that represent binary numbers to decimal and vice versa. The main issue is that I'm unsure of how to deal with the decimal point, say converting -11.11 to decimal. This is a homework assignment, so I'm not allowed to use the built in functions.
Here's my code for one of the two:
function decimal= mybin2real(binarystring)
decimal = 0;
for i = 1 : length(binarystring)
decimal = decimal + str2num(binarystring(i)) * 2^(length(binarystring) - i);
end
decimal
end
I was thinking about finding where the decimal point was using strfind, but i'm not sure how to implement it in the matlab code.
  댓글 수: 6
Daniel Shub
Daniel Shub 2012년 11월 2일
At the command line type
type bin2dec
or
edit bin2dec
this will let you see the source code.
SB
SB 2012년 11월 2일
Thanks alot, that's really helpful, I didn't know we could even do that.

댓글을 달려면 로그인하십시오.

채택된 답변

Matt Fig
Matt Fig 2012년 11월 2일
편집: Matt Fig 2012년 11월 2일
Here I have simply fixed your code. You were really close!
function decimal= mybin2real(binarystring)
% Converts an input string of 1s and 0s to a number.
Ind = strfind(binarystring, '.');
L = length(binarystring);
if isempty(Ind)
Ind = L+1;
end
Num1 = binarystring(1:Ind-1);
LN1 = length(Num1);
Num2 = binarystring(Ind+1:end);
LN2 = length(Num1);
dec1=0;
for ii = 1 : LN1
dec1 = dec1 + str2double(Num1(LN1-ii+1)) * 2^(ii-1);
end
dec2=0;
for ii = 1 : length(Num2)
dec2 = dec2 + str2double(Num2(ii)) * 2^-(ii);
end
decimal=dec1+dec2;
  댓글 수: 6
SB
SB 2012년 11월 2일
so like, if strcmp(binarystring(1),'-')==1 decimalvalue=-dec1-dec2
or something like that? I'm not quite sure, to be honest.
Matt Fig
Matt Fig 2012년 11월 2일
No. As the very first thing....
if binarystring(1)=='-'
binarystring = binarystring(2:end);
F = -1;
else
F = 1;
end
Then at the end:
decimal = decimal*F;

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Andrei Bobrov
Andrei Bobrov 2012년 11월 2일
편집: Andrei Bobrov 2012년 11월 3일
decimal = (binarystring-'0')*pow2(size(binarystring,2)-1:-1:0).';
ADD
binarystring = '-11.11';
b = binarystring - '0';
[~,s] = ismember([-3,-2],b);
p = b(b >= 0);
decimal = sign(b(1))*p*pow2(diff(s) + (-2:-1:-1-numel(p)))';
  댓글 수: 2
SB
SB 2012년 11월 2일
That doesn't work since something like mybin2real('-11.11') outputs -77 instead of -3.75 (it doesnt look for the decimal point)
Andrei Bobrov
Andrei Bobrov 2012년 11월 2일
see ADD part

댓글을 달려면 로그인하십시오.


prince kumar
prince kumar 2018년 7월 15일
편집: KSSV 2019년 10월 23일
n=input('input binary no.=');
n=int2str(n); s=0;
for i=1:numel(n)
s=s+(str2num(n(i))*(2.^(numel(n)-i)));
end
s

카테고리

Help CenterFile Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by