Цитата(AndreyKeil @ Feb 8 2007, 21:27)

Извиняюсь, если мой вопрос не в тему, скажите алгоритм преобразования целого числа в формат плавающей точки и наоборот - плавающего в целое?
Будете смеяться, но тупо до безобразия. Не буду рассказывать про форматы ИЕЕЕ. В ембеддед приложениях смысла в ихней упаковке нет никакого. Если што, сами найдёте. А общий смысл такой: целое число нужно привести к формату 1,хх...хх. Это называецца мантисса. Что соответствует диапазону 111...11 до 100..00. Или, в десятичном эквиваленте, от 1,9..99 до 1. И в комплект дать експоненту, т.е. тупой множитель вида 2^N, где N, я, для удобства, принимаю как ±0х3f. Ехп содержится в отдельном байте. Старший бит которого является знаком числа в целом. Таким образом плавучее число прецтавляет из себя такую конструкцию: Мант*(2^Ехп). Нуль, когда в мантиссе нуль. Это ессно.
Пример. Вначале имеете число, пусть 8р. И ему в соотв. ставим експоненту. Вначале=7. Бо это номер старшево бита.
Далее, сдвигаем влево и соотвецтвенно декрементируем ехпоненту. До тех пор, пока старший разряд не станет =1. Или не кончится ехпонента. Если подвинули 7 раз, а 1 в старшем разряде нет, тоды имеем нуль. Судьба.
Пример 0х80 -> 0х80 мантисса и 7-експонента. Проверяем: 0х80 это 1,0. Множим его на 2^7, получаем 128. Или 0х80 целочисленно.
0х01-> 0х80мантисса и 0-експонента. Проверяем:0х80 это1,0. Множим его на 2^0, получаем 1. Оба-на, совпадло!
Плывучее в целое - строго наоборот. Сдвигаем на число разрядов в ехп, предварительно отняв от неё номер старшево бита мантиссы. Если ехп получилась отриццательная, то вправо. Если положительная, то влево. Т.е. результат может быть сильно больше исходной мантиссы! Или наоборот, 0.
Пример. М=0х80, Е=0х7. Тогда отымем от Е 0х7. Получим нуль. Сдвинем 0х80 на нуль влево, получим 0х80. Опять совпадло! Чюдо!
Пример нумер2: М=0х80, Е=0х0. Отымаем от Е 0х7. Получаем Е=-7. Помним, что старший бит ехп - знак числа в целом. Для удобства его упаковывают в Е на время хранения. Но в работе он должен храниться отдельно для упрощения арифметики. Но отсюда вытекает проблема: в результате любых манипуляций Е должна находиться в пределах ±0х3F, или 0x3f...0xc0. Если вылетает за, значить у нас произошло исключение - результат стал равен ±бесконечность или ± не-число. Что тут делать - думайте сами. Итак, число 0х80 сдвигаем на -7 разрядов влево, т.е. вправо. Получаем 0х1. Совпало. Кто бы сомневался.