1.6. Constante
2018/12/16 in Programare in C
O constanta are un tip si o valoare. Atat tipul cat si valoarea sunt determinate de caracterele care intra in in compunerea constantei. Valoarea unei constante nu poate fi schimbata in timpul executiei programului in care a fost utilizata.
Cuvantul cheie const
Folosim prefixul const pentru a declara constante de un anume tip dupa cum urmeaza:
- Programul 004 - Aria unui dreptunghi
#include <stdio.h>
int main() {
const int LUNGIME = 10;
const int LATIME = 5;
const char NEWLINE = '\n';
int aria;
aria = LUNGIME * LATIME;
printf("valoarea ariei este: %d", aria);
printf("%c", NEWLINE);
return 0;
}
Dupa compilare si executie, Programul 004 produce urmatorul rezultat:
valoarea ariei este: 50
In practica programarii se obisnuieste ca definirea constantelor sa se faca cu LITERE MARI.
1.6.1. Constante intregi
Constantele intregi pot fi scrise in sistemul de numeratie cu baza 8, 10 sau 16.
O constanta zecimala intreaga este un sir de cifre zecimale. Constantele zecimale se reprezinta prin complement fata de doi pe 16 biti sau pe 32 de biti, daca nu incap pe 16 biti.
Constantele intregi reprezentate pe 16 biti sunt de tip int, iar cele reprezentate pe 32 de biti sunt de tip long.
Daca dorim sa reprezentam o constanta zecimala pe 32 de biti, chiar daca ea incape pe 16 biti, trebuie sa o terminam prin L sau l.
Exemple:
Reprezentare externa | Reprezentare interna in binar |
---|---|
12345 | 0011000000111001 |
123456789 | 00000111010110111100110100010101 |
12345L | 00000000000000000011000000111001 |
O constanta zecimala are tipul unsigned daca se termina prin litera U sau u. O astfel de constanta se reprezinta pe 16 biti daca nu este mai mare decat 65535 si pe 32 de biti in caz contrar. In cazul in care dorim ca o constanta intreaga fara semn mai mica decat 65536 sa fie reprezentata pe 32 de biti, constanta respectiva se va termina prin una din urmatoarele succesiuni de litere:
- ul
- lu
- UL
- LU
Constantele intregi fara semn pot fi utilizate pentru a economisi memorie. Astfel, constantele de tip int din intervalul [32768, 65535] se pastreaza pe 32 de biti, in vreme ce constantele de tip unsigned din acelasi interval se reprezinta pe 16 biti.
Exemple:
40000u | constanta intreaga de tip unsigned reprezentata pe 16 biti; |
40000U | constanta intreaga de tip unsigned reprezentata pe 16 biti; |
40000lu | constanta intreaga de tip unsigned reprezentata pe 32 biti; |
40000ul | constanta intreaga de tip unsigned reprezentata pe 32 biti; |
40000UL | constanta intreaga de tip unsigned reprezentata pe 32 biti; |
40000LU | constanta intreaga de tip unsigned reprezentata pe 32 biti; |
O constanta octala intreaga este o succesiune de cifre octale (0 - 7) precedata de un 0 nesemnificativ. O astfel de constanta se pastreaza pe 16 biti, daca acestia ii sunt suficienti si pe 32 in contrar. In cazul in care o costanta octala se termina prin L sau l, ea se pastreaza pe 32 de biti chiar daca sunt suficienti 16 biti pentru reprezentarea ei.
Constantele octale sunt de tip unsigned daca se reprezinta pe 16 biti si de tip unsigned long daca se reprezinta pe 32 de biti.
O constanta hexazecimala intreaga este o succesiune de cifre hexazecimale (0 - 7) precedate de 0x
sau de 0X
. In rest, ea are aceleasi proprietati ca si o constanta octala.
Cifrele hexazecimale se obtin extinzand cifrele zecimale cu litere mici sau mari din intervalul de la A la F.
Litera care reprezinta o cifra hexazecimala | Valoare in zecimal |
---|---|
a sau A | 10 |
b sau B | 11 |
c sau C | 12 |
d sau D | 13 |
e sau E | 14 |
f sau F | 15 |
Exemple:
Constanta | Tipul constantei | Lungimea reprezentarii |
---|---|---|
123 | constanta zecimala de tip int | 16 biti |
0123 | constanta octala de tip unsigned | 16 biti |
40000 | constanta zecimala de tip long | 32 biti |
040000 | constanta octala de tip unsigned | 16 biti |
0123456 | constanta octala de tip unsigned | 16 biti |
123L | constanta zecimala de tip long | 32 biti |
0123l | constanta octala de tip unsigned long | 32 biti |
0x123 | constanta hexazecimala de tip unsigned | 16 biti |
0xa1b2c3 | constanta hexazecimala de tip long unsigned | 32 biti |
0XABCFL | constanta hexazecimala de tip long unsigned | 32 biti |