Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
======= вот решение с "плавающей точкой"
32 бит умножить на 32 бит (все единицы) будет FF FF FF FE 00 00 00 01
FFFFFFFE00000001 в десятичном виде - 18446744065119617025
18 446 744 065 119 617 025
привести ваше 32 битное число к типу float или double
float 32 ±1.175e-38 to ±3.402e38
double 32 ±1.175e-38 to ±3.402e38
вот так
(float)число
Сделать умножение и результат привести к двум 32 битным числам нужного типа
long int 32 -2147483648 to 2147483647
unsigned long int 32 0 to 4294967295
signed long int 32 -2147483648 to 2147483647
Старшее 32 битное число - будет результат поделить на 2 в степени 32
А младшее 32 битное будет - результат минус (старшее число умноженое на 2 в степени 32).
==============
Пример
если 18446744065119617025 поделить на 2 в 32 степени (4294967296) получим 4294967294,0000000002328306436539
FFFFFFFE и остаток 0,0000000002328306436539
это старшее 32 битное число в нужном нам 64 битном.
теперь вычтем из 18446744065119617025 число 4294967294 умноженое на 2 в степени 32 (4294967296) получаем число 1
это младшее 32 битное число.
так мы получили 64 битный результат: FF FF FF FE 00 00 00 01
[Posted by 83.167.116.97 via http://webwarper.net/ru This is added while posting a message to avoid misuse.
Try: http://webwarper.net/webwarper.exe Example of viewing: http://webwarper.net/ww/~av/http://webwarper.net/ ]