Sunteți pe pagina 1din 14

Sisteme de numeratie

Un sistem de numeratie contine:


1. O multime de cifre, cu ajutorul carora vom scrie numere
2. O multime de reguli de scriere a numerelor prin aceste cifre
Numarul de cifre al sistemului de numeratie poarta denumirea de
baza sistemului de numeratie.
Sunt doua tipuri de sisteme de numeratie:
1. Sisteme de numeratie pozitionale – cand numarul va depinde de pozitia cifrei. Ex
sistemul zecimal, care contine 10 cifre: 0 1 2 3 4 5 6 7 8 9- sunt resturile de la
impartirea unui numar la 10.
2. Sistem de numeratie nepozitional: sistemul cu cifre romane:
I, V, X, L, C, D, M
Exemple se sisteme de numeratie:
1. Sistemul binar: contine 2 cifre {0; 1}. Se numeste sistem in baza 2, iar cifrele 0 si
1 sunt resturile de la impartirea unui numar cu 2.
2. Sistemul ternar: contine 3 cifre {0; 1; 2}. Se numeste sistem in baza 3, iar cifrele
0, 1 si 2 sunt resturile de la impartirea unui numar cu 3.
3. Sistemul cuaternar: contine 4 cifre {0; 1; 2; 3}. Se numeste sistem in baza 4, iar
cifrele 0, 1, 2 si 3 sunt resturile de la impartirea unui numar cu 4.
….
4. Sistemul octal: contine 8 cifre {0; 1; 2; 3; 4; 5; 6; 7}. Se numeste sistem in baza 8,
iar cifrele 0, 1, 2, …, 7 sunt resturile de la impartirea unui numar cu 8.
5. Sistemul zecimal: contine 10 cifre { 0; 1; 2; 3; 4; 5; 6; 7; 8; 9}. Se numeste
sistem in baza 10, iar cifrele 0, 1, 2, …, 9 sunt resturile de la impartirea unui numar
cu 10.
….
6. Sistemul hexazecimal: contine 16 cifre {0; 1; 2; 3; 4; 5; 6; 7; 8; 9; A; B; C; D; E;
F}. Se numeste sistem in baza 16, iar cifrele 0, 1, 2, …, 9, A, B, C, D, E, F sunt
resturile de la impartirea unui numar cu 16
(10)10 = (A)16 (13)10 = (D)16
(11)10 = (B)16 (14)10 = (E)16
(12)10 = (C)16 (15)10 = (F)16
….
Conversia numerelor dintr-un sistem in altul:
Ex. (n)10 = ?2 = ?4 = ?8 = ?16 =?5 =?11 = …

Puterile numarului 2 (na zuboc)

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

Deci pentru a transforma un numar n din baza 10 in baza b, trebuie:


1. Sa-l impartim la b consecutiv, pana catul este 0
2. Luam resturile in ordine inversa.
Algoritmi de conversie
a unui numar din baza 10 in baza 2; 4; 8; 16; …
Pentru a obtine numarul in orice baza se ia variabila string S;
Rezolvarea exercitiilor.
Exercitiu 1 76110 = ?2= ?4=?8=?16=?13=?7=?
Atentie: orice numar in baza 2 reprezinta o suma de puteri a numarului 2.

Ex1 761 = 512+ 128+64+32+16+8+1 = (1011111001)2


Transformarea unui numar real zecimal in baza 2; 4; 8; 16; 5;…
Exemplu 2
171. 640625 = ?2= ?4=?8=?16=?5=?
Pentru a transforma un numar real-zecimal in baza 2 trebuie:
1. Sa luam intregul acestui numar si sa-l transformam in baza 2
2. Luam partea zecimala si o inmultim cu 2, apoi iar partea zecimala si o inmultim cu 2 si
asa mai departe, pana partea fractionara devine 0, sau pana la un anumit numar de cifre
(cat mai multe cifre, ca sa nu obtinem o perioada)
3. Vom lua de la toate produsele doar intregul
a) baza 2-?
171= 128+32+8+2+1= (10101011)2
0.640625 *2= 1.28125
0.28125 *2 =0.5625
0.5625*2= 1.125
0.125*2= 0.25
0.25*2= 0.5
0.5*2= 1.0
1 1 1
171,640625= 128+32+8+2+1+ 2 + 8 + 64 = (10101011,101001)2
Conversia inbersa a unui numar din baza b in baza 10,
inclusiv si pentru b=10
Ne vom folosi de formula
(c n c n−1 c n−2 c n−3 … c1 c 0 ,c −1 c−2 c−3 … c−m) b=¿
n n−1 n−2 n−3 1 0
= c n∗b +c n−1∗b + c n−2∗b + cn−3∗b +…+ c1∗b +c 0∗b +¿
−1 −2 −3 −m
+c−1∗b +c −2∗b + c−3∗b + …+c−m∗b

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

(12A3B,C0D)16= 1*164 +2*163 +10*162+3*16+11*160 +12*16-1+0*16-2+13*16-3 =

12 13 12∗256+13 3085
=65536+8192+2560+48+11+ + =76347+ =76347+ = 76347 , 753173828125
16 4096 4096 4096

Lucrul pentru acasa


24 noiembrie
Mai usor se poate de transformat un numar din baza 10 in baza, adunand puterile
nr. 2
Teorema. Oumar natural este o suma de puteri in baza 2

Ex. 856= 512+256+64+16+8 = (1101011000)2

Conversia inversa a unui numar din baza b in baza 10,


inclusiv si pentru b=10
Ne vom folosi de formula

(c n c n−1 c n−2 c n−3 … c1 c 0 ,c −1 c−2 c−3 … c−m) b=¿


n n−1 n−2 n−3 1 0
= c n∗b +c n−1∗b + c n−2∗b + cn−3∗b +…+ c1∗b +c 0∗b +¿
−1 −2 −3 −m
+c−1∗b +c −2∗b + c−3∗b + …+c−m∗b

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

(12A3B,C0D)16= 1*164 +2*163 +10*162+3*16+11*160 +12*16-1+0*16-2+13*16-3 =

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.

Deaceea e mai usor sa transformam numerele din u in v,


cand u,v= 2; 4; 8; 16; 32;64;….

Conversia se face prin baza 2.


Conversia directa a numerelor in baza 2, direct in baza 4; 8; 16; 32;… si invers

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

Ex. 010.101.111.011.110.111.110.111.111, 111.011.110.111.1002=(257367677,73674)8


Invers. Inlocuim fiecare cifra a bazei 8 prin grupul respective de trei cifre al bazei 2
Ex. (20345627.125473)8 = (010000011100101110010111.001010101100111011)2

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

Ex. (5ABCD8EF,64DFA)16= (01011010101111001101100011101111,01100100110111111010)2


Transformarea din 4 in 16
Transformam din 4 in 2, iar apoi din 2 in 16
Ex. (32122302, 3321103)4 = (1110.0110.1011.0010,1111.1001.0100.1100)2 = (E6B2,F94C)16
Problema : De alcatuit un program transforma nr s din baza 2 direct in 4
#include<bits/stdc++.h>
using namespace std;
string s, s1, s2;
int i,m,j;
const string a[4] = {"00","01","10","11"};
const string b[4] = {"0","1","2","3"};
int main()
{ cout<<"S=";cin>>s;
if (s.find('.')> s.size()) s=s+".";
cout<<s<<endl;
m=s.find('.'); cout<<m<<endl;
if ((m)%2==1) s="0"+s;
m=s.find('.');
if ((s.size()-(m+1))%2==1) s=s+"0";
cout<<s<<endl;
s2="";
i=0;
while (i<m){ s1=s.substr(i,2);
j=0;
while ((j<=3)&&(s1!=a[j])) j++;
s2=s2+b[j];
i+=2;
}
s2=s2+"."; i++;
while (i<s.length()){ s1=s.substr(i,2);
j=0;
while ((j<=3)&&(s1!=a[j])) j++;
s2=s2+b[j];
i+=2;
}
if (s2[s2.size()-1]=='.') s2=s2.erase(s2.size()-1,1);
cout<<"S in baza 4 este ="<<s2<<'\n';
return 0;
}
Operaţii cu şiruri de caractere(string) în C++
Declararea:
#include<string>
Using namespace std;
string s;

Apelul funcţiilor : nume_string.nume_funcţie(parametru_1,parametru2);


paramtrii în cazul cînd sunt aplicabili.

Atenţie! : Indexarea stringului începe de la 0 la L-1 unde L este lungimea şirului de caractere.

1. s.clear(); , şterge tot din şir, echivalent cu s=””;


2. s.length() sau s.size(); returnează lungimea şirului.
3. Operatorul+= , s+=q; , adaugă la stringul s pe q ( string sau char );
4. s.erase(poz , n); şterge n caractere din s începînd cu poziţia poz.
5. s.substr(poz,n); returnează subşirul ce începe pe poziţia poz de lungimea n caractere din
stringul s.
6. s.find( q, poz); returnează prima apariţie a lui q ( string sau char ) din stringul s începînd
căutarea cu poziţia poz.
7. s.rfind(q, poz ); returnează ultima apariţie a lui q ( string sau char ) din stringul s începînd
căutarea cu poziţia poz.
8. s.insert(poz, s2); inserează în şirul s pe poziţia poz şirul s2.
s.insert(poz, n, ch); inserează în şirul s pe poziţia poz , caracterul ch repedetat de n ori.
9. s.compare(s1); returnează valoarea
 1 dacă s > s1;
 0 dacă s = s1;
 -1 dacă s < s1;

Pentru informaţii adăugătoare vizitaţi: http://www.cplusplus.com/reference/string/string


Operatii cu numere binare
Numerele binare cooar cifre de 0 si 1
Putem face urmatoarele operatii:
- Adunarea
- Scaderea
- Inmultirea
- Impartirea

Adunarea numerelor binare:


0+0=0; 0+1=1+0=1; 1+1=2=10; 1+1+1=3=11 ; 1+1+1+1=4=100;
1+1+1+1+1=5= 101; 1+1+1+1+1+1=6= 110; ….
Scaderea, inmultirea, impartirea numerelor binare.

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