/*
Функция преобразует двоичные числа в десятичные, и возвращает целое.
Локальные переменные:
p - вычисление переменной порядка;
*/
int poryadok(char st[32])
{
long p1 = 1,p = 0;
int i;
/*
Перемещение в обратном порядке от 8-ого бита до 1-ого.
1.. 8 - является диапазоном битов от 32 битов длинные
комбинация, где сохраняется присвоение
*/
for (i = 8;i >= 1;i--)
{
if (st[i] == '1') // ищем "1" в диапозоне
{
p += p1; // вычисление порядка
p1 *= 2;
}
else
p1 *= 2;
}
p -= 127;
return(p);
}
/*
функция перобразует число из двоичной в деситичную с выделяет фиксированную часть, возвращяет вещественное.
локальные переменные:
m - переменная для фиксирование неподвижной части ;
m1 -переменная для разделения на 1/2..
*/
float mantissa(char st[32])
{
float m1 = 0.5, m = 1.;
int i;
/*
Движение от 9-ого бита до 31-ого.
9.. 31 - является диапазоном битов от 32 битов длинной комбинации, где выделенная часть сохраненяется
*/
for (i = 9;i <= 31;i++)
{
if (st[i] == '1')
{
m += m1;
m1 *= 0.5;
}
else
m1 *= 0.5;
}
/*
Первый бит из нашей комбинаций 32 битов - выевляет является ли число полжительным или отрицат.:
1 - отрицательный;
0 - положит..
*/
if (st[0] == '1')
{
m *= -1;
}
return m;
}
/*
Главная функция.
локальные переменные:
poryadok_ - переменная для определение порядка;
mantissa_ - переменная для вычисление фиксированной части;
chislo_ - преобразуемое число;
str - множество 32 битных символьных комбинаций;
c - одиночная символьная переменная.
*/
void main()
{
char str[32], c;
int i;
long poryadok_;
float mantissa_, chislo;
// Очистка экрана
clrscr();
cout<<"Enter the 32 number in bin system:";
gotoxy(1,2);
// Вывод 32 точки, для ввода
for (i = 0; i <= 31; i++)
{
if ( (i == 1) || (i == 9) )
{
putch(' ');
}
putch('.');
}
gotoxy(1,2);
/*
Цикл для организации ПРАВИЛЬНОГО входа 32 наборов двоичных знаков
только '1' и '0' тмогут быть введены.
*/
i = 0;
while (i != 32)
{
if ( (i == 1) || (i == 9) )
{
putch(' ');
}
c = getch();
if ( (c == '1') || (c == '0') )
{
putch(c);
str[i] = c;
i++;
}
}
/*
Теперь мы вычисляем порядок, фиксированную часть, и заключительное число.
*/
poryadok_ = poryadok(str);
mantissa_ = mantissa(str);
chislo = exp(log(2)*poryadok_)*mantissa_;
/*
Вывод данных.
*/
cout<<"\n\n Order = "<<poryadok_;
cout<<"\n fixed point part = "<<mantissa_;
cout<<"\n Number = "<<chislo;
cout<<"\n\n Press any key to exit...";
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения