Documente Academic
Documente Profesional
Documente Cultură
n 0 1 2 3 4 5 6 7 8 9 10
2n 1 2 4 8 16 32 64 128 256 512 1024
n 11 12 13 14 15 16 17 18 19 20
2 204 409 819 1638 3276 6553 13107 26214 52428 104857
n
8 6 2 4 8 6 2 4 8 6
Exemplu 1
(111010010101,1011101)2 =1*211 +1*210 +1*29 +0*28 +1*27 +0*26 +0*25 +1*24 +0*23
+1*22 +0*21 +1*20 +1*2-1 +0*2-2 +1*2-3 +1*2-4 +1*2-5 +0*2-6 +1*2-7 =
1 1 1 1 1
= 2048+1024+512+128+16+4+1+ 2 + 8 + 16 + 32 + 128 =
64+16+ 8+4 +1 93
=3733+ 128 =3733+ 128 =3733,7265625
Exemplu 2
12 13 12∗256+13 3085
=65536+8192+2560+48+11+ + =76347+ =76347+ = 76347 , 753173828125
16 4096 4096 4096
Exemplu 1
(111010010101,1011101)2 =1*211 +1*210 +1*29 +0*28 +1*27 +0*26 +0*25 +1*24 +0*23
+1*22 +0*21 +1*20 +1*2-1 +0*2-2 +1*2-3 +1*2-4 +1*2-5 +0*2-6 +1*2-7 =
1 1 1 1 1
= 2048+1024+512+128+16+4+1+ 2 + 8 + 16 + 32 + 128 =
64+16+ 8+4 +1 93
=3733+ 128 =3733+ 128 =3733,7265625
Exemplu 2
12 13 12∗256+13 3085
=65536+8192+2560+48+11+ + =76347+ =76347+ = 76347 , 753173828125
16 4096 4096 4096
Ex. 3
(23017,204)8 = 2*8 +3*8 +0+1*81+7*80 +2*8-1+0+4*8-3=
4 3
2 4 132
=8192+1536+8+7+ 8 + 512 =9743+ 512 = 9743.2578125
Problema1
Fie ca se da: double x;
1. De citit x
2. De transformat si de scris nr x=?2
3. Ex 453, 0625 = ?2
N=trunc(x); string s;
If (n==0) s=”0” else s=””;
While (n) {s=char(n%2+48)+s; n/=2;}
s=s+”.”; x=x-trunc(x);
for (int i=1; i<=10; i++)
{x=x*2; n=trunc(x); s=s+char(n+48); x=x-trunc(x);
while (s[s.size()-1]==”0”) s.erase(s.size()-1,1);
if (s[s.size()-1]==”.”) s.erase(s.size()-1,1);
cout<<”numarul x in baza 2 este:”<<endl; cout<<s;
Problema:
Daca vrem sa transformam un numar din baza u in baza v, metoda generala este de
a transforma nr . din baza u in baza 10, iar apoi din baza 10 in baza v.
Insa calculele sunt enorme.
Regula 1.
1. Pentru a transforma un numar din baza 2 in baza 4, impartim numarul de la virgula
spre stanga si spre dreapta in grupuri cate 2 cifre binare.
2. Daca sunt grupuri incomplete la inceput sau dupa virgula la sfarsit le complectam cu 0
3. Inlocuim fiecare grup de doua cifre prin cifra respectiva a bazei 4 si anume:
002 = 04 012= 14 102= 24 112 =34
Ex. 01|11|01|11|00|11|01|00|11, 10|11|11|01|11|01|102= (131303103, 2331312)4
Invers: inlocuim fiecare cifra a bazei 4 prin grupul respectiv al bazei 2
(2301231102,2322101)4 =(10110001101101010010, 10111010010001)2
Regula 2
1. Pentru a transforma un numar din baza 2 in baza 8, impartim numarul de la virgula
spre stanga si spre dreapta in grupuri cate 3 cifre binare.
2. Daca sunt grupuri incomplecte la inceput sau dupa virgula la sfarsit le complectam
cu 0
3. Inlocuim fiecare grup de trei cifre prin cifra respectiva a bazei 8 si anume
0002 = 08 0012=18 1002 =48 1012 =58
0102 = 28 0112 =38 1102 =68 1112 =78
Regula 3
1. Pentru a transforma un numar din baza 2 in baza 16, impartim numarul de la virgula
spre stanga si spre dreapta in grupuri cate 4 cifre binare.
2. Daca sunt grupuri incomplecte la inceput sau la sfarsit dupa virgula le complectam
cu 0
3. Inlocuim fiecare grup de 4 cifre prin cifra respectiva a bazei 16 si anume
00002 = 016 00012=116 01102 =616 01112 =716 10102= A16 10112 =B16
00102= 216 00112 =316 10002 = 816 10012=916 11002 =C16 11012 =D16
01002 =416 01012 =516 11102 =E16 11112 =F16
Ex (0011.1101.1100.0111.0000.1000.0100,1111.0011.1111.1110)2 = (3DC7084,F3FE)16
Invers: Inlocuim fiecare cifra a bazei 16 prin grupul respective de patru cifre al bazei 2
Atenţie! : Indexarea stringului începe de la 0 la L-1 unde L este lungimea şirului de caractere.