![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 20.01.2009
Сообщений: 26
|
![]()
From Stilet: Пусть этот топик будет статьей. Я его в Свободное общение перенесу как заметку
Приходит некий пакет данных в нем есть данные 4 байта - "42 59 11 c7" данные в "формате Motorola (MSB->LSB), то есть для преобразования этих чисел в формат Intel, применяемый в PC-совместимых компьютерах, необходимо поменять порядок байт на обратный" Последний раз редактировалось Stilet; 28.07.2009 в 13:10. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 20.01.2009
Сообщений: 26
|
![]()
Преобразование двоичного числа с плавающей точкой в 32 битный формат IEEE754
формула F= (-1)^s*2^(E-127)*(1+M/2^23) где: S- бит знака (31 бит) E- смещенная экспонента (23-30 биты) M - остаток от мантиссы (0-22 биты) F- десятичное число с плавающей точкой Формат числа таков: старший бит = знак, 8 бит = порядок + 127 (127=смещение), младшие = мантисса. берем 42 59 11 c7 и преобразуем в бинарный вид получаем 1000010010110010001000111000111 разбираем полученное 0 10000100 10110010001000111000111 (1бит 8бит 23бита - первый бит=0 поэтому например в калькуляторе его непокажут - отсчитывайте с конца) 0=S - знак "+" (1 это "-") 10000100=132=Е - смещенная экспонента 1011001000100011100011 - мантисса ( Но, у нормализованной двоичной мантиссы первый бит всегда равен 1, так как число лежит в диапазоне 1<=M<2. Нет смыла, записывать единицу в отведенные 23 бита, поэтому в отведенные 23 бита записывается остаток от мантиссы.) дописываем "1", получаем 11011001000100011100011=7112931=M F= (-1)^s*2^(E-127)*(1+M/2^23)=(-1)^0*2^(132-127)*(1+7112931/2^23) =1*2^5*(1+7112931/8388608)=1*32*(1,84...)=59,13..... (небуду записывать все знаки) вот как-то так все и получается. реализация этого в программе думаю будет несложной. Последний раз редактировалось Stilet; 28.07.2009 в 13:10. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перевод из строки в число и обратно | AsmBeginer | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 10 | 22.05.2010 18:49 |
Как узнать что число не Float(без остатка) при результате деления? | zotox | Помощь студентам | 7 | 19.07.2009 15:49 |
float to int | span4 | SQL, базы данных | 7 | 01.06.2009 10:57 |
перевод/округление дробных данных в БД | kate158 | БД в Delphi | 3 | 15.05.2009 16:08 |