Documente Academic
Documente Profesional
Documente Cultură
|, sau logic pe bii, se execut bit cu bit conform lui SAU-LOGIC; este folosit pentru
a seta diferii bii.
de atribuire (asignare)
o asignare simpl, care se noteaz prin caracterul = i are forma: v=(expresie) unde v este o
variabil simpl, referin la un element de tablou sau de structur. Se asociaz de la dreapta
la stnga astfel:vn==v1=v=expresie; asignarea fcndu-se mai nti v=expresie i apoi se
asociaz lui v1 apoi v2 i tot aa pn la vn.
o asignare compus, caz n care pentru atribuire n afar de caracterul = se mai folosete i
forma: operator=, unde operator poate fi unul binar aritmetic sau unul logic pe bii, i deci
poate fi unul din: /, %, *, -, +, <<, >>, &, ^, | .
Structura : var operator= expresie
este echivalent cu
var = var
operator (expresie)
o incrementare i decrementare, sunt operatori unari. Acetia sunt ++ i --, putnd fi
postfixai(dup operand), respectiv prefixai (naintea operandului).
de forare a tipului sau de conversie explicit (cast)
o (tip) operand prin care valoarea operandului se convertete la tipul indicat.
de determinare a dimensiunii
o sizeof data sau sizeof (tip), determinnd dimensiunea n octei a unei date sau a unui tip;
de adresare(&, refereniere) i de indirectare(*, derefereniere)
parantez
o parantezele rotunde, ( )
o paranteze ptrate, [ ]
condiionali
o E1 ? E2 : E3,
unde E1, E2, E3 sunt expresii.
virgul
o leag dou expresii n una singur astfel:
exp1, exp2
ali operatori (la structuri):
o punct .
o sgeat ->
O expresie poate folosi operatori din clase diferite, la evaluarea ei inndu-se cont de:
preceden (prioritate): d ordinea de efectuare a operaiilor;
asociativitate: indic ordinea de efectuare a operaiilor care au aceeai preceden; poate fi stnga>dreapta (S->D) sau dreapta->stnga (D->S);
regula conversiilor implicite: asigur stabilirea unui tip comun pentru ambii operanzi, la fiecare
operaie care solicit acest lucru i n care tipurile difer; regula de baz: se promoveaz tipul cu
domeniu de valori mai mic ctre tipul cu domeniul de valori mai mare;
Ordinea de evaluare dat de preceden i asociativitate poate fi modificat grupnd operaiile cu ajutorul
parantezelor.
3. Exemple
Operatori condiionali
Exemplul 1:
#include <iostream>
using namespace std;
void main (void)
{
double n1, n2, n3;
cout << "Introduceti 3 numere: ";
cin >> n1 >> n2 >> n3;
cout << (n1 <= n2 && n2 <= n3 ? "Sunt in ordine" : "Nu sunt in ordine") << '\n';
}//end main
Operatori logici
Exemplul 2:
#include <iostream>
using namespace std;
int IsAlpha (char ch);
void main (void)
{
char ch;
cout << "Introduceti un caracter: ";
cin >> ch;
cout << (IsAlpha(ch) != 0 ? "Este o litera" : "Nu este o litera") << '\n';
}//end main
int IsAlpha (char ch)
{
return ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z';
}// end IsAlpha
Operatori pe bii
Exemplul 3: program care aplic operatorii pe bii unor valori dup care le afieaz n zecimal i octal.
#include <iostream>
using namespace std;
void main(void)
{
unsigned char x = '\011';
unsigned char y = '\027';
cout << "x = " << oct << short(x) << '\n';
cout << "y = " << oct << short(y) << '\n';
cout << "~x = " << oct << (short)(~x) << '\n';
cout << "x & y = " << oct << (short)(x & y) << '\n';
cout << "x | y = " << oct << (short)(x | y) << '\n';
cout << "x ^ y = " << oct << (short)(x ^ y) << '\n';
cout << "x << 2 = " << oct << (short)(x << 2) << '\n';
cout << "x >> 2 = " << oct << (short)(x >> 2) << '\n';
}//end main
Operatori de atribuire multipl i de incrementare/decrementare
Exemplul 4: program care citete de la consol un numr ntreg i realizeaz cu el operaii de nmulire,
mprire modulo, sau exclusiv pe bii, i pe bii.
#include <stdio.h>
void main(void)
{
int x;
5. Teme:
1. S se scrie un program care afieaz valoarea polinomului de gradul 3 pentru o anumit valoare a
variabilei reale x.
2. S se scrie un program care citete lungimile laturilor unui triunghi (folosind variabile ntregi) i
afieaz aria triunghiului ca valoare real.
3. S se scrie un program care afieaz valorile biilor unei variabile de tip unsigned char aplicnd
succesiv operatorul de deplasare dreapta i operatorul %.
4. S se scrie un program care monitorizeaz un canal de 16/32/64 bii. Pentru aceasta citii de la
tastatur o valoare ntreg fr semn a care va fi afiat n zecimal, binar, octal i hexazecimal.
Folosii o funcie pentru conversia numerelor din baza 10 n baza 2. Implementai o alt funcie
numit getsets() care primete trei valori ca parametri:
- x: valoarea citit de la tastatur
- p: poziia unui bit din cei 16/32 sau 64 de bii (numrnd de la dreapta)
- n: numrul de bii care vor fi extrai din tabel.
Funcia returneaz, aranjai spre dreapta, acei n bii ai valorii x, pornind de la poziia p, unde
p>8*sizeof(x) i p>n. Afiai rezultatul n binar, octal i hexazecimal.
5. S se scrie un program care citete de la intrarea standard un numr ntreg i afieaz numrul de
zerouri din reprezentarea sa binar.
6. Se citete de la intrarea standard o valoare ntreag. S se afieze n format zecimal valoarea fiecrui
octet al ntregului citit.
7. Se citesc de la tastatur 2 numere reale. S se realizeze operaiile de adunare, scdere, nmulire i
mprire cu valorile date. S se afieze rezultatele obinute, apoi s se rotunjeasc valorile obinute
la valori ntregi, folosind operatorul cast i fr a folosi funcii specifice. S se afieze apoi valoarea
minim dintre numerele citite folosind operatorul condiional.
8. Citii de la tastatur mai multe caractere reprezentnd litere mici. S se transforme caracterele citite
n litere mari n 2 moduri: printr-o operaie aritmetic, respectiv folosind o operaie logic i o masc
adecvat.
9. Citii de la tastatura 2 numere ntregi. Dac sunt egale, determinai aria cercului cu raza egal cu
valoarea citit, iar dac sunt diferite calculai aria dreptunghiului cu laturile egale cu valorile date.
Afiai aria calculat specificnd forma geometric pentru care s-a fcut calculul.
5. Homework:
1. Write a program that displays the value of a 3-rd degree polynom, calculated in a certain point x.
2. Write a program that reads from the keyboard 3 values representing the lengths of a triangles
sides and than displays the triangles area.
3. Write a program that reads an unsigned char value and displays the binary values resulting after
recursively applying the shift right and the % operators.
4. Write a program that monitors a communications channel on 16/32/64 bits. In order to do that,
read from the keyboard an unsigned int value a, that will be displayed in decimal, binary, octal and
hexadecimal counting bases. Use a function for converting the number from base 10 in base 2.
Implement another function called getsets() that receives 3 parameters:
- x: the value read from the keyboard
- p: the position of a bit of those 16/32 or 64 bits (counting from the right).
- n: the number of bits that will be extracted from the array.
The function returns, adjusted to the right, those n bits from the value x, starting with the position p,
where p>8*sizeof(x) and p>n. Display the result in binary, octal and hexadecimal
5. Write a program that reads from the standard input an integer number and displays the number of
zeroes from its binary representation.
6. Read an integer value from the standard input. Write, in decimal format, the value of each byte of
the value.
7. Read 2 float numbers from the keyboard. Calculate and display the results obtained by applying
the main arithmetic operations (+, -, *, /) upon them. Cast the results into integer values, whithout
using any specific rounding functions. Display the minimum input value using the conditional
operator.
8. Read from the keyboard several lowercase characters. Transform them into uppercase letters
using:
- an arithmetic operation;
- a logical operation, combined with a specific mask;
9. Read 2 integer values from the keyboard. If they are equal, determine the area of a circle that has
the radius equal with the read value. If the values are not equal, determine the area of the rectangle
that has as sides the read values. In both cases, display the name of the geometrical shape that
corresponds to the calculated area.