Компьютерный форум NoWa.cc

Компьютерный форум NoWa.cc (https://nowa.cc/index.php)
-   Программирование (https://nowa.cc/forumdisplay.php?f=295)
-   -   Перевод из двоичного числа в десятичное (https://nowa.cc/showthread.php?t=120232)

Crosslive 25.09.2007 07:39

Перевод из двоичного числа в десятичное
 
Возникла проблемка с переводом из двоичного в десятичное.
В инструкции по протоколу которым я пользуюсь написано:
Имеет знак (S), десятичный порядок (Exponent), выраженный БЕЗЗНАКОВЫМ числом и указывающий положение ДЕСЯТИЧНОЙ точки (0 для целого числа, 1 для числа с десятыми долями и т.п.) и ненормализованную мантиссу (Mantissa).
S - старший бит
Exponent - 3 следующих бита
Mantissa - остальные биты (длина мантиссы определяется размером поля данных)
Значение числа можно вычислить, как
(-1)^S * 10^(-Exponent) * Mantissa

Во всех документациях с интернета написано несколько по-другому. Но ни тем ни другим способом не получается.
Может кто знает или есть более обширная документация, помогите.
Пример:
0100 0010 0110 0000 0110 0010
должно получится (округленно) 56,0957

Мешок 16.10.2007 15:07

Ответ: Перевод из двоичного числа в десятичное
 
Главное знать откуда идет исчисление целой части, а откуда - дробной, т.е. точку. Не помню как это сделать.
Далее слева от точки идет двойка в степени, т.е. 2 в 0-й степени, 2 в 1-й, 2 во 2-й....
Там где единица - считаешь ее разряд, начиная с нулевого и возводишь двойку в эту степень.
Т.о.
1) первые 4 бита отбрасываем для знака и ехр. - 0100
2) далее 8 бит идет для целой части - 0010 0110 (правда получается 36): 0*2^0 + 1*2^1 + 1*2^2 + 0*2^3 + 0*2^4 + 1*2^5 + 0*2^6 + 0*2^7 = 36
3) с дробной частью поступаем примерно так же только там нужно: 1/0*2^1 + 0*2^2..... или можно записать по другому: 0*2^-1 + 0*2^-2 +....
Далее алгоритм уже, думаю сам сообразишь


Посчитал, и дробная часть тоже не совпадает. Мож ответ и должен быть другим?
По ходу я тут только нафлеймил... Извините

Добавлено через 28 минут
Код:

var s:string;
ff,f:text;
a:array[1..1000] of integer;
i,n,x,v,j:integer;


begin
clrscr;
assign(ff,'output.txt');
rewrite(ff);
assign(f,'input.txt');
{$I-}
reset(f);
{$I+}
if IOResult=0 then
begin
repeat
readln(f,s);
for i:=1 to 10 do
a[i]:=-1;
i:=1;
repeat
if copy(s,i,1)='0' then a[i]:=0;
if copy(s,i,1)='1' then a[i]:=1;
i:=i+1;
n:=i-1;
until (copy(s,i,1)='-1') or (i=length(s)+1);
for i:=1 to n do
begin
v:=1;
for j:=1 to (n-i) do
v:=v*2;
x:=x+a[i]*v;
end;
writeln(ff,x);
until EOF(f);
end
else
writeln(ff,'ERROR');
close(f);
close(ff);
end.

Эта задача была на одной из школьных олимпиад. Ее решение довольно простое...

Нашел. не знаю правильно ли

xilian 22.10.2007 12:22

Ответ: Перевод из двоичного числа в десятичное
 
Читать сюда : все станет понятно про вещественные числа : http://www.delphikingdom.com/asp/vie...?catalogid=374


Текущее время: 09:27. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Copyright ©2004 - 2026 NoWa.cc

Время генерации страницы 0.01996 секунды с 9 запросами