Sunteți pe pagina 1din 8

Reprezentarea numerelor în calculator

Reprezentarea numerelor intregi pozitive

Cea mai naturală reprezentare a numerelor întregi pozitive este scrierea pozitională în baza
2.

De exemplu, numărul 20 se reprezintă pe 8 biti ca 00010100.

 20 scris în baza 2 este: 10100 (Resturile completatea de la dreapta la stânga). Cum


dorim reprezentarea lui 20 pe 8 biți => vom complete la stanga cu încă 3 zerouri: =>
00010100 (20= 0*27 + 0*26 + 0*25 + 1*24 +0*23 +1*22 +0*21 + 0*20)
 Se observă că cel mai mare număr natural reprezentabil pe 8 biti este => 11111111
( 1*27 +1*26 + 1*25 + 1*24 +1*23 +1*22 +1*21 + 1*20 = 28 -1=256-1=255)

adică 255.

In general, cel mai mare număr natural reprezentabil pe n biti este 2n-1.

Cel mai mic număr reprezentabil în acest fel, indiferent de numărul de biți ales, este 0.

De exemplu, numărul 20 se reprezintă pe 8 biti ca 00010100, primul reprezentând semnul.

 Se observă că cel mai mare număr întreg reprezentabil pe 8 biti este => 01111111
( 1*26 + 1*25 + 1*24 +1*23 +1*22 +1*21 + 1*20 = 27 -1=128-1=127)

adică 127.

In general, cel mai mare număr întreg reprezentabil pe n biti este 2n-1-1.

Cel mai mic număr reprezentabil în acest fel, indiferent de numărul de biți ales, este
dat de 1 și restul de 0, adică -2n-1 .

 11000000
( 1*27 + 0*26 +0*25 + 0*24 +0*23 +0*22 +0*21 + 0*20 = 27 =>-128, primul bit fiind
pentru semn)
In C++
CONVERSIA din baza 10 in baza 2
#include <iostream>

using namespace std;


int v[100],n,a;
int main()
{
int i;
cin>>a;
while(a>0)
{
v[++n]=a%2;
a=a/2;
}
for(i=n;i>=1;i--)
cout<<v[i];
}
CONVERSIA din baza 2 in baza 10
#include <iostream>

#include <cmath>
using namespace std;
int n,a,x;
int main()
{
int i;
cin>>a>>n;
for(i=0; i<n; i++)
{
x=x+(a%10)*pow(2,i);
a=a/10;
}
cout<<x;
}

CONVERSIA din baza 2 in baza 10 EFICIENT


#include <iostream>
using namespace std;
int v[100]={0,1,0,0,1},n=5;
int main()
{
int i,nr=v[0];
for(i=1;i<=n;i++)
nr=nr*2+v[i];
cout<<nr;
}
CONVERSIA din baza 10 in baza 16

#include <iostream>

using namespace std;


int a,n;
char v[100];
int main()
{
int i,x;
cin>>a;
while(a>0)
{
x=a%16;
if(x<=9)
v[++n]=(char)(x+48);
else
v[++n]=(char)(55+x);
a=a/16;
}
for(i=n; i>=1; i--)
cout<<v[i];

}
CONVERSIA din baza 16 in baza 10

#include <iostream>

using namespace std;


char v[100]= {'1','A','5'};
int n=3;
int main()
{
int i,nr=0;
for(i=0; i<n; i++)
{
if(v[i]<='9')
nr=nr*16+(v[i]-48);
else
nr=nr*16+(v[i]-55);
}
cout<<nr;
}
Numere reale

Numerele reale sunt reprezentate prin exponent și mantisă, numită notație științifică.
Pornind de la faptul că orice număr se scrie cu ajutorul puterilor lui 10, adică al
exponenților, vom putea controla poziția virgulei zecimale, iar reprezentarea se numește în
virgulă mobilă, deoarece virgula zecimală își schimbă poziția în funție de valoarea
exponentului.
Exemplu:
12.5=12.5 *100=0.125*102=125*10-1=125E-1

Mantisă Exponent
Codificarea în memoria internă a numerelor reale se realizează reprezentând mantisa și
exponentul. În plus, se vor folosi doi biți pentru reprezentarea semnului mantisei și a
exponentului.
Astfel, dacă vrem să reprezentăm un număr real pe 32 de biți (simplă precizie), vom folosi
1 bit pentru semnul mantisei, 1 bit pentru semnul exponentului, 7 biți pentru exponent și 23
de biți pentru mantisă.
Dubla precizie înseamnă reprezentarea numerelor reale pe 64 de biți.
12.5(10)=1100,1(2)

 12 în baza 10 este 1100 în baza 2 !

0.5 *2=1.0= 0.0 +1


=> 12.5(10)=1100,1(2) =0,11001(2) *104

Exponentul este 4, semnul fiind + => punem 0 pentru bitul semnului exponent
4(10)=100(2)
Mantisa este 11001 cu semnul +
 0 0 0000100 11001 00 0000 0000 0000 0000

S-ar putea să vă placă și