![]() |
Перевод из двоичного числа в десятичное
Возникла проблемка с переводом из двоичного в десятичное.
В инструкции по протоколу которым я пользуюсь написано: Имеет знак (S), десятичный порядок (Exponent), выраженный БЕЗЗНАКОВЫМ числом и указывающий положение ДЕСЯТИЧНОЙ точки (0 для целого числа, 1 для числа с десятыми долями и т.п.) и ненормализованную мантиссу (Mantissa). S - старший бит Exponent - 3 следующих бита Mantissa - остальные биты (длина мантиссы определяется размером поля данных) Значение числа можно вычислить, как (-1)^S * 10^(-Exponent) * Mantissa Во всех документациях с интернета написано несколько по-другому. Но ни тем ни другим способом не получается. Может кто знает или есть более обширная документация, помогите. Пример: 0100 0010 0110 0000 0110 0010 должно получится (округленно) 56,0957 |
Ответ: Перевод из двоичного числа в десятичное
Главное знать откуда идет исчисление целой части, а откуда - дробной, т.е. точку. Не помню как это сделать.
Далее слева от точки идет двойка в степени, т.е. 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; |
Ответ: Перевод из двоичного числа в десятичное
Читать сюда : все станет понятно про вещественные числа : 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