![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ace1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 17.1.2007 Репутация: нет Всего: нет |
// Programm F 61
// Преобразование Fixed-Float # include <stdio.h> # include <conio.h> # include "BinaryInt.h" # include "BinaryFloat.h" typedef unsigned int DWORD; float FixedFloat (DWORD x, DWORD size, DWORD r) { if ((x<<(32-(size-1)))==0) return 0.0; DWORD b=1<<(size-2); BinaryInt("b=",b); DWORD s=b<<1; BinaryInt ("s=",s); int i; for (i=size -2, i>=0, i --;;) { if( x&b) break; b>>=1; } printf ("%d\n", i); DWORD p=i-r; printf("%d\n",p); DWORD t=p+127; BinaryInt("t=",t); DWORD m=x<<(32-i)>>9; BinaryInt("m=",m); m|=t<<23; BinaryInt("m=",m); m|=(x&s)<<(31-(size-1)); BinaryInt("m=",m); union { float f; DWORD n; } u; u.n=m; return u.f; } // -------------- void main(void) { DWORD x; printf ("x=");scanf("%x",&x); float f=FixedFloat(x,12,4); printf ("f=%f",f); getch(); } помогите пож) |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
н-дя... а поподробнее можно? Что она должна делать(1)? и где конкретно непонятно(2) ?
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
1. Если не трудно, поставьте теги Code
2. Эта прога как минимум еще вызывает функции из этих файлов: # include "BinaryInt.h" # include "BinaryFloat.h" Нужно бы все-таки поподробнее рассказать, что она хотя бы должна делать. |
|||
|
||||
| GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 1 Всего: 14 |
Вот, прокоментировал чуть чуть
-------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Могу предположить что BinaryInt - вывод в каком-либо виде на экран значения второго параметра с комментарием...
Хотя функция названа по-идиотски... имхо |
|||
|
||||
| ace1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 17.1.2007 Репутация: нет Всего: нет |
# include <stdio.h>
# include <conio.h> void BinaryInt (char* text, int n) { printf ("%s", text); unsigned int b=0x80000000; while (b>0) { (n&b)==0? printf("0") : printf("1"); b=b>>1; } printf("\n"); } ---это binaryint, переводит в двоичный вид //---------------------------------------------------------- # include <stdio.h> # include <conio.h> void BinaryFloat (char * text, float ff) {printf ("%s", text); union {unsigned int n; float f; } u; u. f=ff; unsigned int b=0x80000000; while (b>0) { (u.n &b)==0? printf ("0"): printf("1"); b=b>>1; } printf("\n"); } -- это binaru float, она по ходу делает то же самое, только в 4-х байтах программа как я понял, переводит число из одного типа в другое Добавлено @ 19:46 // Program F61 // Преобразование Fixed Float # include <stdio.h> # include <conio.h> # include "BinaryInt.h" # include "BinaryFloat.h" typedef unsigned int DWORD; //синоним для типа целого числа float FixedFloat (DWORD x,DWORD size,DWORD r) { if ((x<<(32-(size))) == 0) return 0.0; //число 0 DWORD b=1<< (size - 2); //1 напротив начала числа BinaryInt ("b=",b); //бинарный вид DWORD s=b<<1; //1 напротив знака числа BinaryInt ("s=", s); //бинарный вид int i; /позиция старшей единицы в числе for (i=size-2; i>=0; i--)//цикл позиций в числе { if (x&b) break; //определена позиция старшей единицы b>>=1; //сдвиг 1 в соседний бит справа } printf ("i=%d\n",i); //монитор int p=i-r; //матеметический порядок - 1 printf ("p=%d\n",p); //монитор DWORD t=p+127; BinaryInt ("t=",t); DWORD m=x<<(32-i)>>9; BinaryInt ("m=", m); //бинарный вид мантиссы m|=t<<23; BinaryInt ("m=",m); m|=(x&s)<<(31-(size-1)); BinaryInt ("m=",m); union { float f; //поле вещественного типа DWORD n; //поле целого типа } u; u.n=m; //модуль вещественного числа return u.f; //вернуть результат } //---------------- void main (void) { DWORD x; printf ("x="); scanf ("%x", &x); //клавиатурный ввод float f = FixedFloat (x,12,4); //преобразование фикс-флоат printf ("f=%f", f); //монитор getch(); } ---эта таже прога, с комментариями, но я не могу понять смысл ее работы , на примере бы желательно посмотрть Добавлено @ 19:47 g = 2.1 g = 01000000000001100110011001100110 x = 2.2 x = 00000000000000000000000000000010 b = 00000000000000000000010000000000 s = 00000000000000000000100000000000 i = 1 t = -3 p = 01111100 m = 00000000000000000000000000000000 n = 00111110000000000000000000000000 f = 0.125000 Press any key to continue */- это распечаточка, помогите пожалуста |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Блин, ну тегами кода, что ли, сложно воспользоваться???
|
|||
|
||||
| ace1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 17.1.2007 Репутация: нет Всего: нет |
извините за теги
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Возможно, берет и печатает двоичное представление целого числа - отдельно порядок, отдельно мантиссу... и еще куча всяких параметров - знак, еще чего-то... а зачем тебе, если не секрет?
|
|||
|
||||
| GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 1 Всего: 14 |
Я понял смысл программки, но я реално не пойму почему ЭТА программка не выводи 0,0 если заносить числа типа 4096, 8192 и т.п. ???
условие if ((x<<(32-(size))) == 0) return 0.0; при вводе этих чисел должна выводить нули.... т.е. положительный бит после 13-го бита??? Мистика какая-то.... Кстати незачем задавать 11 цыклов сдесь: for (i=size-2; i>=0; i--){} -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
| ace1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 17.1.2007 Репутация: нет Всего: нет |
у меня экзамен послезавтра, и мне надо будет эту прогу преподу объяснить, которую он сам дал
Добавлено @ 11:14 ну так может по шагом хоть что-нить объяснить, хоть чтоб ему втереть это, и можно поподробнее про мантису, сколько ей выделеятся знаков, знак итд |
|||
|
||||
| GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 1 Всего: 14 |
Я вчера дома объяснялку писал
Добавлено @ 12:27 Кстати задача действительно интересная, я от нее даже тащусь -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
| ace1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 17.1.2007 Репутация: нет Всего: нет |
пасиб огромное, у меня кстати есть еще обратное преобразование, если надо, могу кинуть)
Добавлено @ 12:50 accord_999@mail или 335-812-925 |
|||
|
||||
| GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 1 Всего: 14 |
-------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
| ace1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 17.1.2007 Репутация: нет Всего: нет |
Добавлено @ 21:41 мне кто-нить объяснения кинет? |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |