binari

Considerăm acum operatorii aritmetice binare. "+" Operatorii (stabilesc), "-" (scădere), "*" (multiplica) au semnificația aritmetică obișnuită. Atunci când se utilizează binari în C limbă operanzi permise având diferite tipuri aritmetice. În acest caz, compilatorul efectuează conversia de tip automat. Se va aprecia caracteristica de a lua loc în limbajul C, atunci când efectuează o operație de diviziune (operator /) pentru tipul de date întreg. Rezultatul operației de împărțire în acest caz, are un tip. standard, limbajul C definește strict această operațiune numai atunci când ambele operanzi sunt pozitive. În acest caz, partea fracționată este eliminată. În cazul în care un singur operand este negativ, rezultatul depinde de punerea în aplicare. Aici este un exemplu. Luați în considerare următoarele rezultatele printf () apelul funcției

printf ( "23/4 = 23. / 4 = \ n.", 23/4, -23/4);

Când executați un program care conține funcția de apel în mediul Builderv. 6, au fost obținute următoarele rezultate:

5 = 23/4 -23/4 = - 5.

Rețineți că, atunci când se efectuează într-un mediu diferit atunci cand se evalueaza o expresie -23/4 -6 număr poate fi obținut.

operator binar „%“ efectuează calculul restului diviziunii operandului stâng de operator dreapta. Fiecare dintre operanzi poate fi de orice tip întreg. Rezultatul operatorului în cauză, în cazul în care unul dintre operatori este negativ, depinde de punerea în aplicare.

binari „-“ și „+“ au aceeași prioritate, care este mai mică decât prioritatea operatorilor „*“, „/“ și „%“. mai degrabă operatori binari prioritate mai mare. Operatorii unari sunt dreapta-asociativ, și operanzi binare - stânga asociativitatea.

Tipul de conversie atunci când efectuează binari

Limbajul C este capabil de a efectua mulaje atunci când se calculează expresiile aritmetice mixte. Tipul de conversie Numirea este de a aduce operanzi la un tip comun. Limba oferă două tipuri de variații de conversie;

Luați în considerare în primul rând de conversii de tip automate.

Tipul de conversie automată

Reguli pentru executarea de conversii de tip automate sunt de așa natură încât, de obicei, nu duce la pierderea de informații. Faptul este că, atunci când este utilizat cu operanzi mai mici sunt convertite în valori gama operanzi cu o gamă largă de valori, cum ar fi conversia unui întreg într-un număr real în expresia 2 + 5.3.

Baza acestei clasificări a pus cantitatea de memorie ocupată de date.

Tipuri de-scurt includ următoarele tipuri:

Pentru toate tipurile de operațiuni scurte efectuate inițial la tipurile de transformări, care se numește promovarea integrală în toate tipurile de scurte sunt convertite la int. Pentru această regulă, există o clarificare. Tipunsigned scurt este convertit la un int numai atunci când acest tip (int) este suficient pentru a reprezenta întreaga gamă de valori scurte tipaunsigned (de obicei, are loc în acele sisteme în care prezentarea datelor tipashort a alocat o jumătate de cuvânt calculator și cuvântul întreg - pentru tipul de date int). În acest ultim caz tipunsigned scurt este convertit la int unsigned. Luați în considerare codul afișat mai jos:

int main (void) scurt n = 5; char ch = 'A'; printf ( "n + ch = sizeof (n + ch) = \ n.", n + ch, sizeof (n + ch)); getch (); return 0;>

În funcția apelului printf () se calculează valoarea expresiei n + mărime ch și memorie care acoperă rezultatul de calcul al valorii. Când executați acest program în Builder mediu v. 6 pe următorul rezultat ecran a fost obținut:

n + ch = 70 sizeof (n + ch) = 4

Valoarea variabilei ch, convertită în tipul int. este egal cu 65. Adăugarea acestui număr cu valoarea n variabile și dă ca rezultat calcularea numărului de expresie n + ch 70. Partea finală a ieșirii (sizeof (n + ch) = 4) poate fi considerată ca o dovadă a principiului de calcul efectiv efectuat pe operanzi , convertit la tipuint.

Când se face conversia de tip lung folosit principiu trafic. Cu fiecare dintre aceste tipuri de rangul său se leagă. secvență de tip Clasat lung, deoarece tipul având cel mai înalt rang este după cum urmează:

● nesemnate lung lung,

Atunci când este utilizat în operanzi de expresie având diferite grade, tipul de operand, având un rang inferior, este setat la tipul de operand, având un rang superior. De exemplu, dacă expresia are un operand dublu tip. iar al doilea -Long. tipul al doilea operand trebuie convertit la tipudouble.

Din această regulă există o excepție. În cazul în care un operand are tipul lung. iar al doilea -unsigned. în care nu toate int znacheniyaunsigned poate fi reprezentat tipomlong. atunci ambii operanzi sunt convertite la tipuunsigned lung.