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

5 Ansichten (letzte 30 Tage)
SB
SB am 2 Nov. 2012
Bearbeitet: KSSV am 23 Okt. 2019
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 Kommentare
Daniel Shub
Daniel Shub am 2 Nov. 2012
At the command line type
type bin2dec
or
edit bin2dec
this will let you see the source code.
SB
SB am 2 Nov. 2012
Thanks alot, that's really helpful, I didn't know we could even do that.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Matt Fig
Matt Fig am 2 Nov. 2012
Bearbeitet: Matt Fig am 2 Nov. 2012
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 Kommentare
SB
SB am 2 Nov. 2012
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 am 2 Nov. 2012
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;

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Andrei Bobrov
Andrei Bobrov am 2 Nov. 2012
Bearbeitet: Andrei Bobrov am 3 Nov. 2012
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 Kommentare
SB
SB am 2 Nov. 2012
That doesn't work since something like mybin2real('-11.11') outputs -77 instead of -3.75 (it doesnt look for the decimal point)

Melden Sie sich an, um zu kommentieren.


prince kumar
prince kumar am 15 Jul. 2018
Bearbeitet: KSSV am 23 Okt. 2019
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

Kategorien

Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by