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

2 次查看(过去 30 天)
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)

请先登录,再进行评论。


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 中查找有关 String 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by