![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Неактивный пользователь
Регистрация: 21.08.2007
Сообщений: 6
Репутация: 0
|
Возникла проблемка с переводом из двоичного в десятичное.
В инструкции по протоколу которым я пользуюсь написано: Имеет знак (S), десятичный порядок (Exponent), выраженный БЕЗЗНАКОВЫМ числом и указывающий положение ДЕСЯТИЧНОЙ точки (0 для целого числа, 1 для числа с десятыми долями и т.п.) и ненормализованную мантиссу (Mantissa). S - старший бит Exponent - 3 следующих бита Mantissa - остальные биты (длина мантиссы определяется размером поля данных) Значение числа можно вычислить, как (-1)^S * 10^(-Exponent) * Mantissa Во всех документациях с интернета написано несколько по-другому. Но ни тем ни другим способом не получается. Может кто знает или есть более обширная документация, помогите. Пример: 0100 0010 0110 0000 0110 0010 должно получится (округленно) 56,0957 |
|
|
|
| Реклама: | ds k2602t | Магазин бытовой техники: мультиварка цена в москве - переходи на сайт ТАЙМТВ! | данные из метрики в 1с | синтетические камни вставки | Zoom YouTube |
|
|
#2
|
|
Пользователь
![]() Пол:
Регистрация: 27.01.2007
Адрес: Киев
Сообщений: 103
Репутация: 130
|
Главное знать откуда идет исчисление целой части, а откуда - дробной, т.е. точку. Не помню как это сделать.
Далее слева от точки идет двойка в степени, т.е. 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.
Эта задача была на одной из школьных олимпиад. Ее решение довольно простое...
Последний раз редактировалось Мешок; 16.10.2007 в 15:36.. Причина: Добавлено сообщение |
|
|
|
|
|
#3
|
|
Читать сюда : все станет понятно про вещественные числа : http://www.delphikingdom.com/asp/vie...?catalogid=374
__________________
Доктор Кнут, поверьте дети, крайне крут. |
|
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Из числа в текст. Excel. | mrpleasure | МOffice, Переводчики (словари), Органайзеры, Текстовые редакторы | 9 | 19.03.2014 11:08 |
| комплексные числа | BFTFenix | Visual C++ / С/C++ | 15 | 05.02.2011 10:48 |
| Как прочитать числа из бин-файла? | Umnik1 | Visual C++ / С/C++ | 11 | 24.11.2008 10:19 |
|
|