Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не понимаю как работает прога 
:(
    Опции темы
ace1
Дата 17.1.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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();
}
помогите пож) smile 
PM MAIL   Вверх
JackYF
Дата 17.1.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



н-дя... а поподробнее можно? Что она должна делать(1)? и где конкретно непонятно(2) ?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Anikmar
Дата 17.1.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



1. Если не трудно, поставьте теги Code

2. Эта прога как минимум еще вызывает функции из этих файлов:
# include "BinaryInt.h"
# include "BinaryFloat.h"

Нужно бы все-таки поподробнее рассказать, что она хотя бы должна делать.
PM MAIL ICQ   Вверх
GIK
Дата 17.1.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 1
Всего: 14



Вот, прокоментировал чуть чуть smile  если че не понятно спрашиваим и не стисняимся smile 
Код

# 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) //побитовая операция над переменной х (двигает биты влево на 32-12-1=19)
                             //и если значение после этого равно 0 то возвращаем чило 0,0
    return 0.0;

    DWORD b=1<<(size-2);
    //BinaryInt("b=",b); //энто я не щзнаю че
    DWORD s=b<<1;      //опять побитовая операция
  //  BinaryInt ("s=",s);    //опять эта хрень.... и че она сдесь делает
    int i;       //   переменная 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;   // переменная типа  unsigned int
    printf ("x=");scanf("%x",&x); //вывод строки "x="  и сканирование данных (по плану число)
    float f=FixedFloat(x,12,4); //вызов функции и передача 3 параметров 1)переменная х 2)число 12 3) число4
    printf ("f=%f",f);
    getch();
}



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
JackYF
Дата 17.1.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Могу предположить что BinaryInt - вывод в каком-либо виде на экран значения второго параметра с комментарием...
Хотя функция названа по-идиотски... имхо smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ace1
Дата 17.1.2007, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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();
}
---эта таже прога, с комментариями, но я не могу понять смысл ее работы , на примере бы желательно посмотрть smile

Добавлено @ 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
*/- это распечаточка, помогите пожалуста
PM MAIL   Вверх
JackYF
Дата 17.1.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Блин, ну тегами кода, что ли, сложно воспользоваться???


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
ace1
Дата 17.1.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



извините за теги
PM MAIL   Вверх
JackYF
Дата 17.1.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Возможно, берет и печатает двоичное представление целого числа - отдельно порядок, отдельно мантиссу... и еще куча всяких параметров - знак, еще чего-то... а зачем тебе, если не секрет?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
GIK
Дата 17.1.2007, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 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--){} 


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
ace1
Дата 18.1.2007, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



у меня экзамен послезавтра, и мне надо будет эту прогу преподу объяснить, которую он сам дал

Добавлено @ 11:14 
ну так может по шагом хоть что-нить объяснить, хоть чтоб ему втереть это, и можно поподробнее про мантису, сколько ей выделеятся знаков, знак итд
PM MAIL   Вверх
GIK
Дата 18.1.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 1
Всего: 14



Я вчера дома объяснялку писал  smile  пол часа потратил, запарился. Если надо скину после 21:00, когда дома буду.

Добавлено @ 12:27 
Кстати задача действительно интересная, я от нее даже тащусь  smile 


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
ace1
Дата 18.1.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



пасиб огромное, у меня кстати есть еще обратное преобразование, если надо, могу кинуть)

Добавлено @ 12:50 
accord_999@mail или 335-812-925  smile 
PM MAIL   Вверх
GIK
Дата 18.1.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 1
Всего: 14



Кидай  smile 
[email protected]


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
ace1
Дата 18.1.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Код

// Programm F 71
// Преобразование Float-Fixed
# include <stdio.h>
# include <conio.h>
# include "BinaryInt.h"
# include "BinaryFloat.h"
typedef unsigned int DWORD; // синомим для типа целого числа
DWORD FloatFixed (float ff, DWORD size, DWORD r)
{
union
    {
        float f; // поле вещественного типа
        DWORD n; // поле целого типа
    } u; // объект объединения
    u.f=ff; // загрузить число в объединение
    if ((u.n<<1)==0) return 0; // число 0
    DWORD t=(u.n&0x7F800000)>>23; // порядок в стиле Intel?
    BinaryInt("t=",t); // бинарный вид порядка
    int p=t-127;
    printf ("p=%d\n",p);
    DWORD m=((u.n<<8)|0x80000000)>>(31-(p+r));
    BinaryInt("m=",m);
    m|=(u.n&0x80000000)>>(31-(size-1)); // знак
    BinaryInt ("m=",m); // бинарный вид результата
    return m; // вернуть фиксированное число
}
// -----------
void main(void)
{
    float f; // образец результата
    printf("f=") ; scanf ("%f",&f); // клавиатурный ввод
    DWORD x=FloatFixed (f,12,4); // float - fixed
    printf("x=%08x\n",x); 
    getch();
}




Добавлено @ 21:41 
мне кто-нить объяснения кинет? smile  я там кое что узнал, p-порядок числа, m-мантисса
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0707 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.