Documente Academic
Documente Profesional
Documente Cultură
Tipuri de Date Si Baze de Numeratie PDF
Tipuri de Date Si Baze de Numeratie PDF
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10 (cu "depăşire")
Ultimul rând de mai sus se citeşte: "Unu plus unu este egal cu unu-zero (în
baza 2)", valoarea lui 10(2) fiind desigur 2(10).
Pe baza tablei de mai sus se pot aduna oricare 2 numere binare A şi B.
Exemplu (se începe de la dreapta):
1
Scăderea
Scăderea în sistemul binar funcţionează foarte asemănător cu adunarea
binară. Tabla scăderii este:
0 - 0 = 0
0 - 1 = 1 (cu "împrumut")
1 - 0 = 1
1 - 1 = 0
Pe această bază se pot scădea numere binare formate din mai multe 0-uri şi 1-
uri. Operaţia se execută poziţie cu poziţie, de la dreapta la stânga. La
nevoie se foloseşte "împrumutul" de la poziţia de mai la stânga. De exemplu:
0 x 0 = 0
0 x 1 = 0
1 x 0 = 0
1 x 1 = 1
+ 0 0 0 0 0
+ 1 1 0 1 1
-----------------
1 0 0 0 0 1 1 1 0 <== Produsul A x B = 2 + 4 + 8 + 256 = 270(10)
* * * * <== depăşire (la adunare)
Sistemul hexazecimal
Sistemul hexazecimal are baza 16 şi utilizează 16 cifre hexazecimale,
care se notează astfel: 0 1 2 3 4 5 6 7 8 9 A B C D E F.
În acest şir de cifre hexazecimale, cifrele de la 0(16) la 9(16) au
valorile zecimale echivalente, de la 0(10) la 9(10), iar cifrele A(16) ... F(16) au
valorile zecimale de la 10(10) la 15(10).
Pentru reprezentarea valorilor zecimale de la 0 la 15 sunt necesari
exact 4 biţi, începînd cu 0000 şi sfârşind cu 1111. Transformarea unui număr
binar într-unul hexazecimal se face prin gruparea biţilor în grupe de câte 4
biţi, de la dreapta la stînga.
Exemplu:
Transformarea inversă, din hex în bin, se face prin înlocuirea fiecărei cifre
hex prin combinaţia corepunzătoare de 4 biţi.
Pentru conversia unui număr real din baza 10 în baza 16, se analizează
separat partea întreagă şi partea zecimală.
Exemplu:
3
Procesul continuă până când partea fracţionară este zero sau avem suficiente
cifre după virgulă.
#include<iostream>
#include<stdlib.h>
#include<string>
#include<sstream>
using namespace std;
void main (void)
{
char inNouaBaza[256];
char nrBazeDiferite[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
char * pEnd;
string sirCaractere;
int a, b, nouaBaza, inZecimal;
long c, d1, d2, d3, d4;
double x, y;
bool continuare=1;
do
{
cout << "Introduceti numarul zecimal pe care doriti sa il convertiti : ";
cin >> inZecimal;
cout << "Introduceti noua baza de numeratie : ";
cin >> nouaBaza;
// Functia urmatoare converteste intregul 'input' in noua baza 'baza',
// iar rezultatul este transferat in buffer-ul de tip sir de caractere
// 'inNouaBaza'.
// void itoa(int input, char *buffer, int baza);
// O functie similara, 'ftoa', converteste o data de tip float intr-un
// string.
itoa(inZecimal, inNouaBaza, nouaBaza);
// Functie similara de conversie din zecimal in hexazecimal este
// sprintf(inHexazecimal,"%x",inZecimal); aici 'inHexazecimal' este
// tot sir de caractere
cout << "Numarul " << inZecimal << " devine in noua baza : " << inNouaBaza
<< endl;
// In C afisarea conversiei din zecimal in hexazecimal putea fi
// ealizata si astfel:
// printf("%d in hexazecimal este %s\n",inZecimal,inNouaBaza);
cout << "Doriti o noua conversie ? (0-Nu / 1-Da) : ";
cin >> continuare;
} while (continuare!=0);
// Functia 'atoi' (ASCII to integer) e folosita pentru a converti un
// string intr-un intreg, iar sintaxa sa este:
// int atoi(const char *str);
// Variabila 'str' e de tip string, reprezentat de un sir de caractere
// ce contine reprezentarea unui intreg cu semn.
// Daca atoi intalneste un sir fara secvente numerice va returna 0,
4
// insa acelasi rezultat poate aparea si daca exista o
// secventa de caractere ce reprezinta numarul 0, fara a putea astfel
// distinge cele doua situatii. Noua functie 'strtol'
// elimina aceasta deficienta. Variante ale functiei 'atoi' sunt 'atol'
// si 'atof' si sunt folosite pentru a converti un sir de caractere
// in date de tip long sau double si au sintaxele urmatoare:
// long atol(const char *str);
// double atof(const char *str);
cout << "Introduceti un nr. intreg ce va fi citit ca un sir de caractere :
"; cin >> sirCaractere;
stringstream(sirCaractere) >> a; // variabilei intregi 'a' ii este atribuita
valoarea convertita din 'sirCaractere'
cout << "Primul numar intreg obtinut este : " << a << "\n";
b=atoi("20"); // sirul de caractere '20' este convertit in valoare intreaga
cout << "Al doilea numar intreg obtinut este : " << b << "\n";
x=atof("1.7");
cout << "Numarul de tip float convertit din sir de caractere este : " << x
<< endl;
y=a+b+x;
cout << "Suma celor trei numere este : " << y << endl;
sprintf(inNouaBaza,"%x",int(y));
cout << "Partea intreaga a acestui numar, convertita in hexa este : " <<
inNouaBaza << endl;
c = (y >= 0) ? (long)(y+0.5) : (long)(y-0.5);
// are ca efect determinarea celui mai apropiat intreg, atat cand y
// este pozitiv, cat si cand el este negativ
itoa(c, inNouaBaza, 8);
cout << "Numarul obtinut prin rotunjire, convertit in baza 8 este : " <<
inNouaBaza << endl;
// Functia 'strtol' (string to long integer) e folosita pentru a
// converti date de tip string in intreg si are sintaxa:
// long strtol(const char *restrict str, char **restrict end, int
// base);
// argumentul 'str' identifica un string, reprezentat de un sir de
// caractere ce reprezinta intregi cu semn
// argumentul 'base' indica baza ce va fi folosita si ia valori de la 2
// la 36
// rezultatul este directionat catre variabila 'end'
// Similar, avem functia 'strtod' (string to double), cu sintaxa:
// double strtod (const char * str, char ** endptr);
d1=strtol(nrBazeDiferite,&pEnd,10);
d2=strtol(pEnd,&pEnd,16);
d3=strtol(pEnd,&pEnd,2);
d4=strtol(pEnd,NULL,0);
cout << "Conversia numerelor :" << endl;
cout << nrBazeDiferite << endl;
cout << "in baza 10 este : " << endl;
cout << d1 << " " << d2 << " " << d3 << " " << d4 << endl;
}
5
Proiecte:
6