- •Выполнение операций над числами,представленными с плавающей точкой (говорят- в плавающей арифметике).
- •Достоинства формы представления чисел с плавающей точкой.
- •Недостатки формы представления чисел с плавающей точкой:
- •2. Объединения.
- •Void binkod (tip n, char s[])
- •Void binkod (tip n,char s[])
- •Void hexkod(tip n,char s[])
- •Int main ()
Void hexkod(tip n,char s[])
{//Внутреннее 16-ричное представление целого.
const int L=sizeof(tip);
union {
tip a;
unsigned char u[L];
}q;
int i,m;
unsigned char x;
char alf[]="0123456789ABCDEF";
q.a=n;
i=0; m=L<<1–1;
do
{x=q.u[i++];
s[m--]=alf[x&15];
s[m--]=alf[(x>>4)];
}
while (i<L);
s[L<<1]='\0';
}
Int main ()
{const int Q=sizeof(long double);
int n;
double u;
float v;
bool p;
char t [Q<<3 +1];
cout<< "\n int--n ";
cin>> n;
cout<< "\n double--u ";
cin>> u;
cout<< "\n float--v";
cin>> v;
p=true;
//Вызовы функций
binkod( n,t); //либо binkod<int>(n,t);
cout<< n<< ": "<<t<<endl;
hexkod (n,t); //либо hexkod <int>(n,t);
cout<< n<< ": "<<t<<endl;
binkod( u,t); //либо binkod<double>(u,t);
cout<< u<< ": "<<t<<endl;
hexkod (u,t); //либо hexkod <double>(u,t);
cout<< u<< ": "<<t<<endl;
binkod( v,t); //либо binkod<float>( v,t);
cout<< v<< ": "<<t<<endl;
hexkod (v,t); //либо hexkod<float>(v,t);
cout<< v<< ": "<<t<<endl;
binkod( p,t); //либо binkod<bool>(p,t);
cout<< p<< ": "<<t<<endl;
hexkod (p,t); //либо hexkod <bool>(p,t);
cout<< p<< ": "<<t<<endl;
return 0; }
Результаты работы программы:
1023: 00000000000000000000001111111111
1023: 000003FF
-3.5: 1100000000001100000000000000000000000000000000000000000000000000
-3.5: C00C000000000000
2.5: 01000000001000000000000000000000
2.5: 40200000
1: 00000001
1: 01
//вывод 16-го кода с использованием манипуляторов
cout.precision(8);
q.a=-3.5;
cout.fill('0');
for(int i=7;i>=0;i--)
cout<<hex<<setw(2)<<int(q.u[i])<<' ';
cout<<endl;
//Вывод минимального и максимального значений
cout<<"min - max"<<endl;
for(int i=0;i<6;i++)
q.u[i]=0;
q.u[6]=16;
q.u[7]=0;
cout<<q.a<<" ";
for(int i=0;i<6;i++)
q.u[i]=255;
q.u[6]=239;
q.u[7]=127;
cout<<q.a<<endl;
#include <iostream>
using namespace std;
struct xx
{float y;
int p;
};
//Внутреннее представление структуры типа XX
typedef xx tip;
const int L=sizeof(tip);
union {
tip a;
unsigned char u[L+1];
}q;
void inbitreal (tip n,char s[])
{//Внутреннее 2-ое представление структуры типа XX
int i,j,m;
i=0; //0-oй байт
q.a=n; m=L<<3–1;
do
{unsigned char x;
x=q.u[i];
for( j=0;j<8;j++)
{s[m--]=(x&1)+'0';
x=x>>1;
}
i++;
}
while (i<L);
s[L<<3]=0;
}
void inreal16(tip n,char s[])
{//Внутреннее 16-ричное представление целого.
int i, m;
unsigned char x;
char alf[]="0123456789ABCDEF";
i=0; m=L<<1–1;
do
{x=q.u[i++];
s[m--]=alf[x&15];
s[m--]=alf[(x>>4)];
}
while (i<L);
s[L<<1]='\0';
}
int main ()
{xx n;
char t[L<<3+1];
n.y=1.5; n.p=123;
inbitreal(n,t); cout<< n.y<<” ”<<n.p<< ": "<<t<<endl;
inreal16(n,t); cout<< n.y<<” ”<<n.p<< ": "<<t<<endl;
return 0;
}