Tipuri de variabile în C. Tipuri de date și declararea acestora

ÎN această secțiune Principalele tipuri de date din C++ vor fi luate în considerare și aceste tipuri de date sunt denumite încorporate. Limbajul de programare C++ este un limbaj de programare extensibil. Termenul extensibil înseamnă că, pe lângă tipurile de date încorporate, vă puteți crea propriile tipuri de date. De aceea există un număr mare de tipuri de date în C++. Le vom studia doar pe cele principale.

Tabelul 1 - Tipuri de date C++
Tip octet Gama de valori acceptate

tip de date întreg (boolean).

bool 1 0 / 255

tip de date întreg (caracter).

char 1 0 / 255

tipuri de date întregi

scurt int 2 -32 768 / 32 767
nesemnat scurt int 2 0 / 65 535
int 4
nesemnat int 4 0 / 4 294 967 295
lung int 4 -2 147 483 648 / 2 147 483 647
nesemnat lung int 4 0 / 4 294 967 295

tipuri de date în virgulă mobilă

plutire 4 -2 147 483 648.0 / 2 147 483 647.0
plutire lungă 8
dubla 8 -9 223 372 036 854 775 808 .0 / 9 223 372 036 854 775 807.0

Tabelul 1 prezintă principalele tipuri de date în C++. Întregul tabel este împărțit în trei coloane. Prima coloană indică un cuvânt rezervat, care va determina, fiecare în parte, tipul de date. A doua coloană indică numărul de octeți alocați pentru o variabilă cu tipul de date corespunzător. A treia coloană arată intervalul de valori acceptabile. Vă rugăm să rețineți că în tabel toate tipurile de date sunt aranjate de la cel mai mic la cel mai mare.

tipul de date bool

Primul din tabel este tipul de date bool tip de date întreg, deoarece intervalul de valori valide este numere întregi de la 0 la 255. Dar, așa cum ați observat deja, este scris în paranteze - tip boolean date, iar acest lucru este, de asemenea, adevărat. Deoarece bool folosit exclusiv pentru a stoca rezultatele expresiilor booleene. O expresie booleană poate avea unul din două rezultate: adevărat sau fals. adevărat – dacă expresie logică adevărat, fals - dacă expresia logică este falsă.

Dar, deoarece intervalul de valori valide ale tipului de date bool este de la 0 la 255, a fost necesar să se potrivească cumva interval dat cu constante logice adevărate și false definite în limbajul de programare. Astfel, constanta adevărată este echivalentă cu toate numerele de la 1 la 255 inclusiv, în timp ce constanta falsă este echivalentă cu un singur număr întreg - 0. Luați în considerare un program care utilizează tipul de date bool.

// data_type.cpp: Definește punctul de intrare pentru aplicația consolă. #include „stdafx.h” #include folosind namespace std; int main(int argc, char* argv) ( bool boolean = 25; // variabila de tip bool cu ​​nume boolean if (boolean) // condiția instrucțiunii if cout<< "true = " << boolean << endl; // выполнится в случае истинности условия else cout << "false = " << boolean << endl; // выполнится в случае, если условие ложно system("pause"); return 0; }

ÎN linia 9variabilă de tip declarată bool , care este inițializat la 25. Teoretic, dupăliniile 9, într-o variabilă booleană ar trebui să conțină numărul 25, dar de fapt această variabilă conține numărul 1. După cum am spus, numărul 0 este o valoare falsă, numărul 1 este o valoare adevărată. Ideea este că într-o variabilă ca bool poate conține două valori - 0 (fals) sau 1 (adevărat). În timp ce sub tipul de date bool este alocat un octet întreg, ceea ce înseamnă că o variabilă de tip bool poate conține numere de la 0 la 255. Pentru a determina valori false și adevărate, sunt necesare doar două valori 0 și 1. Se pune întrebarea: „Pentru ce sunt celelalte 253 de valori?”

Pe baza acestei situații, am convenit să folosim numerele de la 2 la 255 ca echivalent al numărului 1, adică adevărul. Tocmai de aceea variabila booleană conține numărul 25 și nu 1. În liniile 10 -13 declarat, care transferă controlul operatorului în linia 11, dacă condiția este adevărată și operatorul în linia 13, dacă condiția este falsă. Rezultatul programului este prezentat în Figura 1.

Adevărat = 1 Pentru a continua, apăsați orice tastă. . .

Figura 1 - tipul de date bool

Tipul de date char

Tipul de date char este un tip de date întreg care este utilizat pentru a reprezenta caractere. Adică, fiecărui caracter îi corespunde un anumit număr din interval. Tipul de date char se mai numește și tipul de date caracter, deoarece reprezentarea grafică a caracterelor în C++ este posibilă datorită char. Pentru a reprezenta caractere în C++, tipului de date char i se alocă un octet, un octet conține 8 biți, apoi ridicăm doi la puterea lui 8 și obținem valoarea 256 - numărul de caractere care pot fi codificate. Astfel, folosind tipul de date char, puteți afișa oricare dintre cele 256 de caractere. Toate caracterele codificate sunt reprezentate în .

ASCII (din engleză Standard Code for Information Interchange) - cod standard american pentru schimbul de informații.

Luați în considerare un program care utilizează tipul de date char.

// symbols.cpp: Definește punctul de intrare pentru aplicația consolă. #include „stdafx.h” #include folosind namespace std; int main(int argc, char* argv) ( simbolul char = "a"; // declarând o variabilă de tip char și inițialând-o cu simbolul "a" cout<< "symbol = " << symbol << endl; // печать символа, содержащегося в переменной symbol char string = "сайт"; // объявление символьного массива (строки) cout << "string = " << string << endl; // печать строки system("pause"); return 0; }

Deci, în linia 9o variabilă numită simbol , i se atribuie valoarea simbolului„a” ( cod ASCII). ÎN linia 10 operator cout tipărește caracterul conținut în variabilă simbol ÎN linia 11a declarat o matrice de șiruri cu numeleşir , iar dimensiunea matricei este specificată implicit. Un șir este stocat într-o matrice de șiruri"site-ul web" . Vă rugăm să rețineți că atunci când am salvat simbolul într-o variabilă ca char , apoi după semnul egal punem ghilimele simple în care am scris simbolul. La inițializarea unui tablou de șiruri cu un anumit șir, ghilimelele duble sunt plasate după semnul egal, în care este scris un anumit șir. La fel ca un caracter obișnuit, șirurile sunt scoase folosind operatorul cout, linia 12. Rezultatul programului este prezentat în Figura 2.

Simbol = un șir = site Pentru a continua, apăsați orice tastă. . .

Figura 2 - tipul de date char

Tipuri de date întregi

Tipurile de date întregi sunt folosite pentru a reprezenta numere. Există șase dintre ele în tabelul 1: short int, unsigned short int, int, unsigned int, long int, unsigned long int . Toate au propria lor dimensiune de memorie și interval de valori acceptate. În funcție de compilator, dimensiunea memoriei ocupate și intervalul de valori acceptate pot varia. În tabelul 1, toate intervalele de valori acceptate și dimensiunile memoriei ocupate sunt luate pentru compilatorul MVS2010. Mai mult, toate tipurile de date din Tabelul 1 sunt aranjate în ordinea crescătoare a mărimii memoriei ocupate și a intervalului de valori acceptate. Gama de valori acceptate, într-un fel sau altul, depinde de dimensiunea memoriei ocupate. În consecință, cu cât dimensiunea memoriei ocupate este mai mare, cu atât intervalul de valori acceptate este mai mare. De asemenea, intervalul de valori acceptate se modifică dacă tipul de date este declarat cu prefixul nesemnat. Prefixul nesemnat înseamnă că tipul de date nu poate stoca valori semnate, atunci intervalul de valori pozitive este dublat, de exemplu, tipurile de date short int și unsigned short int.

Prefixe de tip de date întregi:

scurt prefixul scurtează tipul de date la care se aplică prin reducerea dimensiunii memoriei pe care o ocupă;

lung prefixul extinde tipul de date la care se aplica prin marirea dimensiunii memoriei pe care o ocupa;

nesemnat - prefixul dublează intervalul de valori pozitive, în timp ce intervalul de valori negative nu poate fi stocat în acest tip de date.

Deci, în esență, avem un tip întreg pentru a reprezenta numerele întregi: tipul de date int. Datorită prefixelor short, long, unsigned, apare o anumită varietate de tipuri de date int, care diferă în dimensiunea memoriei ocupate și (sau) în gama de valori acceptate.

Tipuri de date în virgulă mobilă

Există două tipuri de date în virgulă mobilă în C++: float și double. Tipurile de date în virgulă mobilă sunt concepute pentru a stoca numere în virgulă mobilă. Tipurile de date float și double pot stoca atât numere cu virgulă mobilă pozitive, cât și negative. Tipul de date float are jumătate din amprenta de memorie față de tipul de date dublu, ceea ce înseamnă că și intervalul de valori acceptate este mai mic. Dacă tipul de date float este declarat cu prefixul lung, atunci intervalul de valori acceptate va fi egal cu intervalul de valori acceptate ale tipului de date dublu. Practic, tipurile de date în virgulă mobilă sunt necesare pentru a rezolva probleme cu calcule de mare precizie, de exemplu, tranzacții cu bani.

Deci, ne-am uitat la punctele principale privind principalele tipuri de date din C++. Tot ce rămâne este să arătăm de unde provin toate aceste intervale de valori acceptate și dimensiunile memoriei ocupate. Și pentru aceasta vom dezvolta un program care va calcula principalele caracteristici ale tuturor tipurilor de date discutate mai sus.

// data_types.cpp: Definește punctul de intrare pentru aplicația consolă. #include „stdafx.h” #include // Biblioteca de manipulare I/O #include // fișier antet al funcțiilor matematice #include folosind namespace std; int main(int argc, char* argv) ( cout<< " data type " << "byte" << " " << " max value "<< endl // anteturi de coloană <<"bool = " << sizeof(bool) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных bool*/ << (pow(2,sizeof(bool) * 8.0) - 1) << endl << "char = " << sizeof(char) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных char*/ << (pow(2,sizeof(char) * 8.0) - 1) << endl << "short int = " << sizeof(short int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных short int*/ << (pow(2,sizeof(short int) * 8.0 - 1) - 1) << endl << "unsigned short int = " << sizeof(unsigned short int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных unsigned short int*/ << (pow(2,sizeof(unsigned short int) * 8.0) - 1) << endl << "int = " << sizeof(int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных int*/ << (pow(2,sizeof(int) * 8.0 - 1) - 1) << endl << "unsigned int = " << sizeof(unsigned int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных unsigned int*/ << (pow(2,sizeof(unsigned int) * 8.0) - 1) << endl << "long int = " << sizeof(long int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных long int*/ << (pow(2,sizeof(long int) * 8.0 - 1) - 1) << endl << "unsigned long int = " << sizeof(unsigned long int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных undigned long int*/ << (pow(2,sizeof(unsigned long int) * 8.0) - 1) << endl << "float = " << sizeof(float) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных float*/ << (pow(2,sizeof(float) * 8.0 - 1) - 1) << endl << "double = " << sizeof(double) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных double*/ << (pow(2,sizeof(double) * 8.0 - 1) - 1) << endl; system("pause"); return 0; }

Acest program este postat astfel încât să puteți vizualiza caracteristicile tipurilor de date din sistemul dumneavoastră. Nu este nevoie să înțelegeți codul, deoarece programul folosește instrucțiuni de control cu ​​care cel mai probabil nu sunteți încă familiarizați. Pentru o cunoaștere superficială a codului programului, voi explica mai jos câteva puncte. Operator dimensiunea() Calculează numărul de octeți alocați pentru un tip de date sau variabilă. Funcţie pow(x,y) ridică sensul x la puterea lui y , această funcție este disponibilă din fișierul antet . manipulatoare fixe și setprecision(). disponibil din fișierul antet . Primul este fix , transmite valori în formă fixă ​​fluxului de ieșire. Manipulator setprecision(n) afișează n zecimale. Valoarea maximă a unui anumit tip de date este calculată folosind următoarea formulă:

Max_val_type = 2^(b * 8 - 1) - 1; // pentru tipurile de date cu numere negative și pozitive // ​​unde b este numărul de octeți alocați în memorie pentru o variabilă cu acest tip de date // se înmulțește cu 8, deoarece există 8 biți într-un octet // scade 1 în paranteze, deoarece intervalul de numere trebuie împărțit în două pentru valori pozitive și negative // ​​scădeți 1 la sfârșit, deoarece intervalul de numere începe de la zero // tipuri de date cu prefixul max_val_type fără semn = 2^(b * 8) - 1; // pentru tipurile de date numai cu numere pozitive // ​​explicațiile pentru formula sunt similare, doar unitatea nu se scade din paranteză

Un exemplu de funcționare a programului poate fi văzut în Figura 3. Prima coloană arată principalele tipuri de date în C++, a doua coloană arată dimensiunea memoriei alocate pentru fiecare tip de date, iar a treia coloană arată valoarea maximă pe care corespunzătoare. tipul de date poate conține. Valoarea minimă se găsește similară cu cea maximă. Pentru tipurile de date cu prefix nesemnat, valoarea minimă este 0.

Tip de date octet valoarea maximă bool = 1 255.00 char = 1 255.00 short int = 2 32767.00 unsigned short int = 2 65535.00 int = 4 2147483647.00 unsigned int = 4 4294967295 long = 4294967295 int = 4 4294967295,00 float = 4 2147483647,00 dublu = 8 9223372036854775808.00 Pentru a continua, apăsați orice tastă. . .

Figura 3 - Tipuri de date C++

Dacă, de exemplu, unei variabile de tip short int i se atribuie valoarea 33000, atunci grila de biți va depăși, deoarece valoarea maximă într-o variabilă de tip short int este 32767. Adică, o altă valoare va fi stocată într-o variabilă. de tip short int, cel mai probabil va fi negativ. Deoarece am atins tipul de date int, merită remarcat faptul că puteți omite cuvântul cheie int și puteți scrie, de exemplu, doar scurt . Compilatorul va interpreta o astfel de intrare ca int scurt. Același lucru este valabil și pentru prefixele lungi și nesemnate. De exemplu:

// prescurtare pentru tipul de date int short a1; // la fel ca short int long a1; // la fel ca long int unsigned a1; // la fel ca unsigned int unsigned short a1; // la fel ca unsigned short int

Variabilele sunt folosite pentru a stoca diverse date în limbaje de programare. O variabilă este o zonă de memorie care are un nume, altfel numit identificator.

Dând un nume unei variabile, programatorul numește în același timp zona de memorie în care valorile variabilei vor fi scrise pentru stocare.

Este un stil bun să numești variabilele în mod semnificativ. Este permisă utilizarea literelor mici și mari, a cifrelor și a liniuței de subliniere, care este considerată o literă în C. Primul caracter trebuie să fie o literă și nu trebuie să existe spații în numele variabilei. În versiunile moderne ale compilatoarelor, lungimea numelui este practic nelimitată. Numele variabilei nu poate corespunde cuvintelor cheie rezervate. Literele mari și mici din numele variabilelor sunt diferite, variabile oŞi O- variabile diferite.

Cuvinte cheie rezervate auto double int struct break else lung comutare registru tupedef char extern return void case float unsigned implicit pentru uniunea semnată do if sizeof volatile continue enumerarea scurtă
În C, toate variabilele trebuie declarate. Aceasta înseamnă că, în primul rând, la începutul fiecărui program sau funcție trebuie să furnizați o listă cu toate variabilele utilizate și, în al doilea rând, să indicați tipul fiecăreia dintre ele.

Când o variabilă este declarată, compilatorul îi alocă spațiu de memorie în funcție de tipul acesteia. AVR GCC lucrează cu tipuri de date folosind instrumente standard char(tip de caracter) și int(tip întreg).

Tipuri variabile

Tastați char

char- este cel mai economic tip. Tipul de caracter poate fi semnat sau nesemnat. Notat în consecință ca „ semnat char„ (tip semnat) și „ nesemnat char" (tip nesemnat). Tipul semnat poate stoca valori în intervalul de la -128 la +127. Unsigned - de la 0 la 255. O variabilă char are 1 octet de memorie (8 biți).

Cuvinte cheie (modificatoare) semnatŞi nesemnat indicați modul în care este interpretat bitul zero al variabilei declarate, adică dacă este specificat cuvântul cheie fără semn, atunci bitul zero este interpretat ca parte a unui număr, în caz contrar bitul zero este interpretat ca semnat.

Tastați int

Valoare întreagă int Pot fi scurt(scurt) sau lung(lung).

Cuvânt cheie (modificator) scurt plasat după cuvinte cheie semnat sau nesemnat. Astfel, se disting următoarele tipuri: signed short int, unsigned short int, signed long int, unsigned long int.

Variabila de tip semnat scurt int(întreg scurt cu semn) poate lua valori de la -32768 la +32767, nesemnat scurt int(întreg scurt fără semn) - de la 0 la 65535. Pentru fiecare dintre ei sunt alocați exact doi octeți de memorie (16 biți).

La declararea unei variabile de tip semnat scurt int cuvinte cheie semnatŞi scurt poate fi omis, iar un astfel de tip de variabilă poate fi declarat simplu int. De asemenea, este posibil să declarați acest tip cu un singur cuvânt cheie scurt.

Variabilă nesemnat scurt int poate fi declarat ca nesemnat int sau scurt nesemnat.

Pentru fiecare dimensiune semnat lung int sau nesemnat lung int Sunt alocați 4 octeți de memorie (32 de biți). Valorile variabilelor de acest tip pot fi în intervalele de la -2147483648 la 2147483647 și, respectiv, de la 0 la 4294967295.

Există și variabile precum lung lung int, pentru care sunt alocați 8 octeți de memorie (64 de biți). Ele pot fi, de asemenea, semnate sau nesemnate. Pentru un tip semnat, intervalul de valori este de la -9223372036854775808 la 9223372036854775807, pentru un tip nesemnat - de la 0 la 18446744073709551615. Un tip semnat poate fi declarat pur și simplu prin două cuvinte cheie lung lung.

Tip Gamă Gama hexagonală Dimensiune
nesemnat char 0 ... 255 0x00...0xFF 8 biți
semnat char
sau doar
char
-128 ... 127 -0x80...0x7F 8 biți
nesemnat scurt int
sau doar
nesemnat int sau scurt nesemnat
0 ... 65535 0x0000 ... 0xFFFF 16 biți
semnat scurt int sau semnat int
sau doar
scurt sau int
-32768 ... 32767 0x8000...0x7FFF 16 biți
nesemnat lung int
sau doar
nesemnat lung
0 ... 4294967295 0x00000000 ... 0xFFFFFFFF 32 de biți
semnat lung
sau doar
lung
-2147483648 ... 2147483647 0x80000000 ... 0x7FFFFFFF 32 de biți
nesemnat lung lung 0 ... 18446744073709551615 0x0000000000000000 ... 0xFFFFFFFFFFFFFFFFFF pe 64 de biți
semnat lung lung
sau doar
lung lung
-9223372036854775808 ... 9223372036854775807 0x8000000000000000 ... 0x7FFFFFFFFFFFFFFF pe 64 de biți

Variabilele sunt declarate într-o declarație. O instrucțiune de declarație constă dintr-o specificație de tip și o listă de nume de variabile separate prin virgulă. Trebuie să existe un punct și virgulă la sfârșit.

O declarație de variabilă are următorul format:

[modificatoare] type_specifier identificator [, identificator] ...

Modificatori- cuvinte cheie semnat, nesemnat, scurt, lung.
Specificator de tip- cuvânt cheie char sau int, care determină tipul variabilei declarate.
Identificator- numele variabilei.

Exemplu: char x;
int a, b, c; nesemnat long long y;, o, În acest fel variabilele vor fi declarate, x, b c nesemnat long long y; y o, În acest fel variabilele vor fi declarate, x. La o variabilă b se vor putea scrie valori de la -128 la 127. În variabile

- de la -32768 la +32767. La o variabilă

- de la 0 la 18446744073709551615. nesemnat long long y; Inițializarea valorii unei variabile la declarare

Când este declarată, o variabilă poate fi inițializată, adică i se poate atribui o valoare inițială. Puteți face acest lucru după cum urmează.

int x = 100; Astfel, în variabilă

Când este anunțat, numărul 100 va fi imediat notat. Este mai bine să evitați amestecarea variabilelor inițializate într-o singură declarație, adică este mai bine să declarați variabilele inițializate pe linii separate. constante Este mai bine să evitați amestecarea variabilelor inițializate într-o singură declarație, adică este mai bine să declarați variabilele inițializate pe linii separate. O variabilă de orice tip poate fi declarată nemodificabilă. Acest lucru se realizează prin adăugarea cuvântului cheie Este mai bine să evitați amestecarea variabilelor inițializate într-o singură declarație, adică este mai bine să declarați variabilele inițializate pe linii separate. const int sau lung intîn funcție de valoarea constantei: dacă constanta este mai mică de 32768, atunci i se atribuie tipul int, altfel lung int.

Exemplu: const long int k = 25; const m = -50;// implicit const int m=-50 const n = 100000;

// implicit const long int n=100000

Misiunea

Semnul „=" este folosit pentru atribuire în C. Se evaluează expresia din dreapta semnului de atribuire, iar valoarea rezultată este atribuită variabilei din stânga semnului de atribuire. În acest caz, valoarea anterioară stocată în variabilă este ștearsă și înlocuită cu una nouă.
Operatorul „=" nu trebuie înțeles ca egalitate.

De exemplu, expresia a = 5; ar trebui citit ca „atribuiți variabila a la 5”. Exemple: x = 5 + 3;// adăugați valorile 5 și 3, // atribuiți rezultatul variabilei x (scrieți variabilei x) b = a + 4;// adăugați 4 la valoarea stocată în variabila a, // atribuiți rezultatul rezultat variabilei b (scrieți variabilei b) b = b + 2;
// adăugați 2 la valoarea stocată în variabila b, // atribuiți rezultatul rezultat variabilei b (scrieți variabilei b)

În partea dreaptă, valoarea variabilei poate fi folosită de mai multe ori: c = b * b + 3 * b; Exemplu: x = 3;// variabilei x i se va atribui valoarea 3 y = x + 5;// numărul 5 va fi adăugat la valoarea stocată în variabila x, // rezultatul rezultat va fi scris în variabila y z = x * y;// valorile variabilelor x și y vor fi înmulțite, // rezultatul va fi scris în variabila z z = z - 1;
// 1 va fi scăzut din valoarea stocată în variabila z // rezultatul va fi scris în variabila z Astfel, în variabila z

numărul 23 va fi stocat
Pe lângă operatorul simplu de atribuire „=", există mai mulți operatori de atribuire combinați în C: „+=", "-=", "*= Exemple: x += y;// la fel ca x = x + y; - se adaugă x și y // și se scrie rezultatul la variabila x x -= y;// la fel ca x = x - y; - se scade valoarea y din x // si se scrie rezultatul in variabila x x *= y;// la fel ca x = x * y; - înmulțiți x cu y // și scrieți rezultatul în variabila x x /= y;// la fel ca x = x / y; - împărțiți x la y // și scrieți rezultatul în variabila x x %= y;

// la fel ca x = x % y;

// se calculează restul întreg la împărțirea x la y // și se scrie rezultatul în variabila x Creștere și descreștere sau Dacă trebuie să modificați valoarea unei variabile la 1, atunci utilizați.

creştere scăderea

Creştere // valoarea variabilei x va fi mărită cu 1$WinAVR = ($_GET["avr"]); if($WinAVR) include($WinAVR);?>
Decrementează- operatia de scadere a valorii stocate intr-o variabila cu 1.

Exemplu: x--; // valoarea variabilei x va fi redusă cu 1
Creșterea și descreșterea sunt operatori de atribuire. Când utilizați decrementarea și creșterea împreună cu operatorul de atribuire "=", utilizați notația postfix (x++) sau prefix (++x). Prefixul este executat mai întâi.

Exemple: y = x++;
Să presupunem că în variabilă nesemnat long long y; valoarea 5 a fost stocată b se va scrie valoarea 5, după care valoarea variabilei nesemnat long long y; va fi majorat cu 1. Astfel, in b va fi 5, iar în nesemnat long long y;- 6. y = --x;
Dacă în nesemnat long long y; Dacă valoarea 5 a fost stocată, atunci decrementarea va fi efectuată mai întâi nesemnat long long y; la 4 și apoi această valoare va fi atribuită variabilei b. Astfel, nesemnat long long y;Şi b i se va atribui valoarea 4.

În limbajul C, există o distincție între conceptele de „tip de date” și „modificator de tip”. Tipul de date este întreg, iar modificatorul este semnat sau nesemnat. Un întreg cu semn va avea atât valori pozitive, cât și negative, în timp ce un întreg fără semn va avea doar valori pozitive. Există cinci tipuri de bază în limbajul C.

  • char – caracter.
  • O variabilă de tip char are o dimensiune de 1 octet, valorile sale sunt diferite caractere din tabelul de coduri, de exemplu: 'f', ':', 'j' (când sunt scrise în program, sunt incluse într-un singur ghilimele).

  • int – întreg.
  • Mărimea unei variabile de tip int nu este definită în standardul limbajului C. În majoritatea sistemelor de programare, dimensiunea unei variabile int corespunde mărimii unui întreg cuvânt de mașină. De exemplu, în compilatoarele pentru procesoare pe 16 biți, o variabilă de tip int are o dimensiune de 2 octeți. În acest caz, valorile semnate ale acestei variabile se pot situa în intervalul de la -32768 la 32767.

  • plutire – real.
  • Cuvântul cheie float vă permite să definiți variabile de tip real. Valorile lor au o parte fracțională separată de un punct, de exemplu: -5,6, 31,28 etc. Numerele reale pot fi scrise și sub formă de virgulă mobilă, de exemplu: -1.09e+4. Numărul dinaintea simbolului „e” se numește mantisă, iar după „e” se numește exponent. O variabilă de tip float ocupă 32 de biți în memorie. Poate lua valori în intervalul de la 3.4e-38 la 3.4e+38.

  • dublu – dublă precizie reală;
  • Cuvântul cheie dublu vă permite să definiți o variabilă reală cu precizie dublă. Ocupă de două ori mai mult spațiu de memorie decât o variabilă float. O variabilă de tip double poate lua valori în intervalul 1.7e-308 până la 1.7e+308.

  • nul – fără valoare.
  • Cuvântul cheie void este folosit pentru a neutraliza valoarea unui obiect, de exemplu, pentru a declara o funcție care nu returnează nicio valoare.

Tipuri de variabile:

Programele operează cu diverse date, care pot fi simple sau structurate. Datele simple sunt numere întregi și reale, simboluri și pointeri (adresele obiectelor din memorie). Numerele întregi nu au o parte fracțională, dar numerele reale au. Datele structurate sunt matrice și structuri; acestea vor fi discutate mai jos.

O variabilă este o celulă din memoria computerului care are un nume și stochează o anumită valoare. Valoarea unei variabile se poate modifica în timpul execuției programului. Când o nouă valoare este scrisă într-o celulă, cea veche este ștearsă.

Este un stil bun să numești variabilele în mod semnificativ. Numele variabilei poate conține de la unu la 32 de caractere. Este permisă utilizarea literelor mici și mari, a cifrelor și a liniuței de subliniere, care este considerată o literă în C. Primul caracter trebuie să fie o literă. Numele variabilei nu poate corespunde cuvintelor rezervate.

Tastați char

char este cel mai economic tip. Tipul de caracter poate fi semnat sau nesemnat. Notat ca „car semnat” (tip semnat) și „car nesemnat” (tip nesemnat). Tipul semnat poate stoca valori în intervalul -128 până la +127. Unsigned – de la 0 la 255. 1 octet de memorie (8 biți) este alocat pentru o variabilă char.

Cuvintele cheie cu semn și fără semn indică modul în care este interpretat bitul zero al variabilei declarate, adică dacă este specificat cuvântul cheie fără semn, atunci bitul zero este interpretat ca parte a unui număr, în caz contrar bitul zero este interpretat ca semnat.

Tastați int

Valoarea întreagă int poate fi scurtă sau lungă. Cuvântul cheie scurt este plasat după cuvintele cheie semnate sau nesemnate. Deci există tipuri: signed short int, unsigned short int, signed long int, unsigned long int.

O variabilă de tip signed short int (signed short integer) poate lua valori de la -32768 la +32767, unsigned short int (unsigned short integer) - de la 0 la 65535. Fiecare dintre ele are exact doi octeți de memorie (16 biți).

Când se declară o variabilă de tip signed short int, cuvintele cheie signed și short pot fi omise, iar un astfel de tip de variabilă poate fi declarat pur și simplu int. De asemenea, este posibil să declarați acest tip cu un singur cuvânt cheie, scurt.

O variabilă int unsigned short poate fi declarată ca unsigned int sau unsigned short.

Pentru fiecare valoare semnată long int sau unsigned long int, sunt alocați 4 octeți de memorie (32 de biți). Valorile variabilelor de acest tip pot fi în intervalele de la -2147483648 la 2147483647 și, respectiv, de la 0 la 4294967295.

Există și variabile de tip long long int, pentru care sunt alocați 8 octeți de memorie (64 de biți). Ele pot fi semnate sau nesemnate. Pentru un tip semnat, intervalul de valori este de la -9223372036854775808 la 9223372036854775807, pentru un tip nesemnat - de la 0 la 18446744073709551615. Un tip semnat poate fi, de asemenea, declarat lung de două cuvinte cheie.

Tip Gamă Gama hexagonală Dimensiune
nesemnat char 0 … 255 0x00...0xFF 8 biți
semnat char
sau doar
char
-128 … 127 -0x80…0x7F 8 biți
nesemnat scurt int
sau doar
nesemnat int sau scurt nesemnat
0 … 65535 0x0000…0xFFFF 16 biți
semnat scurt int sau semnat int
sau doar
scurt sau int
-32768 … 32767 0x8000…0x7FFF 16 biți
nesemnat lung int
sau doar
nesemnat lung
0 … 4294967295 0x00000000 … 0xFFFFFFFF 32 de biți
semnat lung
sau doar
lung
-2147483648 … 2147483647 0x80000000 … 0x7FFFFFFF 32 de biți
nesemnat lung lung 0 … 18446744073709551615 0x0000000000000000 … 0xFFFFFFFFFFFFFFFFFF pe 64 de biți
semnat lung lung
sau doar
lung lung
-9223372036854775808 … 9223372036854775807 0x8000000000000000 … 0x7FFFFFFFFFFFFFFF pe 64 de biți

Declararea variabilelor

Variabilele sunt declarate într-o declarație. O instrucțiune de declarație constă dintr-o specificație de tip și o listă de nume de variabile separate prin virgulă. Trebuie să existe un punct și virgulă la sfârșit.

[modificatoare] type_specifier identificator [, identificator] ...

Modificatori – cuvinte cheie semnate, nesemnate, scurte, lungi.
Un specificator de tip este un cuvânt cheie char sau int care specifică tipul variabilei care este declarată.
Identificatorul este numele variabilei.

Car x;

int a, b, c;

nesemnat long long y;

Când este declarată, o variabilă poate fi inițializată, adică i se poate atribui o valoare inițială.

Int x = 100;

Când este declarată, variabila x va conține imediat numărul 100. Este mai bine să declarați variabilele inițializate pe linii separate. Un tip de date definește un set de valori, un set de operații care pot fi aplicate acelor valori și modul în care sunt stocate valorile și sunt efectuate operațiunile. Procesul de verificare și plasare a restricțiilor asupra tipurilor de date utilizate se numește verificare de tip sau

  • tastarea datelor programului
  • . Se disting următoarele tipuri de tastare:

Tastarea statică - controlul tipului se efectuează în timpul compilării.

Tastare dinamică - verificarea tipului se face în timpul rulării.

Limbajul C acceptă tastarea statică, iar tipurile tuturor datelor utilizate într-un program trebuie specificate înainte de a fi compilat.

Există simple, compuse și alte tipuri de date.

  • Date simple
  • Datele simple pot fi împărțite în
  • numere întregi,
  • real,

simbolic

  • logic.
  • Date compuse (complexe).
  • Un tablou este o colecție indexată de elemente de același tip.

Tipul șirului este o matrice care stochează un șir de caractere.

  • Pointer - stochează o adresă în memoria computerului care indică anumite informații, de obicei un pointer către o variabilă.

Un program scris în limbaj C operează cu date de diferite tipuri. Toate datele au un nume și un tip. Datele din program sunt accesate prin numele lor (identificatori).

Un identificator este o secvență care nu conține mai mult de 32 de caractere, care poate include orice litere din alfabetul latin a - z, A - Z, numere 0 - 9 și litera de subliniere (_). Primul caracter al identificatorului nu trebuie să fie un număr.

Deși este permis un nume de până la 32 de caractere, doar primele 8 caractere sunt semnificative. În afară de nume, toate datele au un tip. Specificarea tipului este necesară pentru a se ști cât spațiu în RAM va ocupa obiectul dat.

Compilatorul C respectă potrivirea strictă a literelor mari și mici în numele identificatorilor și jetoanelor.

Date întregi

Datele întregi pot fi reprezentate sub formă semnată sau nesemnată.

Întregi fără semn sunt reprezentate ca o secvență de biți în intervalul de la 0 la 2 n -1, unde n este numărul de biți ocupați.

Numerele întregi semnate sunt reprezentate în intervalul -2 n-1 …+2 n-1 -1. În acest caz, cel mai semnificativ bit al datelor este atribuit semnului numărului (0 corespunde unui număr pozitiv, 1 unui număr negativ).

Tipuri și dimensiuni de bază ale datelor întregi:

Date reale

Tip real este destinat să reprezinte numere reale. Numerele reale sunt reprezentate în grila de biți a mașinii într-o formă standardizată.

Forma normalizată a numărului presupune prezența unei cifre semnificative (nu 0) înainte de a separa părțile întregi și fracționale. Această reprezentare este înmulțită cu baza sistemului numeric la gradul corespunzător. De exemplu, numărul 12345.678 în formă normalizată poate fi reprezentat ca

12345,678 = 1,2345678 10 4

Numărul 0,009876 în formă normalizată poate fi reprezentat ca

0,009876 = 9,876·10 -3

În sistemul numeric binar, cifra semnificativă dinaintea separatorului zecimal poate fi doar egală cu 1. Dacă numărul nu poate fi reprezentat în formă standardizată (de exemplu, numărul 0), cifra semnificativă înaintea separatorului zecimal este 0.

Cifrele semnificative ale unui număr, aflate în formă normalizată după separatorul părților întregi și fracționale, sunt numite mantisa numărului.

În cazul general, un număr real din grila de biți a unui computer poate fi reprezentat ca 4 câmpuri.

  • semn— un bit care determină semnul unui număr real (0 pentru numere pozitive, 1 pentru numere negative).
  • grad— determină puterea lui 2 cu care doriți să înmulțiți un număr în formă normalizată. Deoarece puterea lui 2 pentru un număr în formă normalizată poate fi fie pozitivă, fie negativă, puterea zero a lui 2 în reprezentarea unui număr real corespunde unei valori de deplasare, care este definită ca

    unde n este numărul de cifre alocate pentru a reprezenta puterea unui număr.

  • întreg- un bit care este întotdeauna egal cu 1 pentru numerele normalizate, astfel încât în ​​unele reprezentări de tip acest bit este omis și se presupune că este egal cu 1.
  • mantisa— cifre semnificative ale reprezentării unui număr, care se află după separatorul părților întregi și fracționale într-o formă standardizată.

Există trei tipuri principale de reprezentare a numerelor reale în limbajul C:

După cum se poate vedea din tabel, tipurile float și double nu au un bit întreg. În acest caz, intervalul de reprezentare a unui număr real este format din două intervale situate simetric față de zero. De exemplu, intervalul de reprezentare a numerelor flotante poate fi reprezentat ca:

Exemplu: Reprezentați numărul -178.125 într-o grilă de 32 de biți (tip flotant).

Pentru a reprezenta un număr în sistemul de numere binar, transformăm părțile întregi și fracționale separat:

178 10 = 10110010 2 .

0,125 10 = 0,001 2 .

178,125 10 = 10110010,001 2 =1,0110010001 2 111

Pentru a converti în formă normalizată, mutați 7 biți la stânga).

Pentru a determina puterea unui număr, utilizați o schimbare:

0111111+00000111 = 10000110 .

Astfel, numărul -178.125 va fi reprezentat în grila de biți ca

Tip de caracter

Tipul de caracter stochează codul unui caracter și este folosit pentru a afișa caractere în diferite codificări. Datele de caractere sunt specificate în coduri și sunt în esență o valoare întreagă. Pentru a stoca coduri de caractere în limbajul C, se utilizează tipul de caractere.

tip boolean

Tipul boolean este folosit în operații logice, este folosit în testele de condiție algoritmică și în bucle și are două semnificații:

  • adevărat - adevărat
  • fals — — fals

Programul trebuie să declare toate datele utilizate, indicând numele și tipul acestora. Descrierea datelor trebuie să preceadă utilizarea lor în program.

Exemplu de declarare a obiectului

int n; // Variabila n de tip întreg
dublu a; // Variabila a de tip real de dublă precizie

Programatorul spune:

Buna ziua! Am citit articolul tau. Eram foarte trist și amuzant în același timp. Această expresie a ta este deosebit de ucigătoare: „Deoarece o variabilă de tip char este adesea folosită ca matrice, numărul de valori posibile este determinat.” 😆 😆 😆
Nu râd de tine. Crearea unui site web este cu adevărat o ispravă. Vreau doar să vă susțin cu sfaturi și să subliniez câteva greșeli.

1. Valoarea unei variabile de tip char este atribuită după cum urmează:

Iată-l:

Car a = *"A";

Pointerul către matrice este de-adresat și, ca rezultat, valoarea primului element al matricei este returnată, adică. 'O'

2. Resetarea are loc după cum urmează:

Car a = NULL;
char b = ();

//Și așa este șters linia din corpul programului

"" - acest simbol se numește terminator zero. Este plasat la capătul liniei. Tu însuți, fără să știi, ai umplut matricea s1 din articolul tău cu acest simbol. Dar a fost posibil să se atribuie acest simbol numai elementului zero al matricei.

3. Simțiți-vă liber să utilizați terminologia.
Semnul = este o operație de atribuire.
Semnul * este o operație de de-adresare.
Mă refer la acest fragment din articol: „Totul s-a dovedit a fi atât de simplu, înainte de semnul = trebuia să pui semnul * și trebuia să declari numărul elementului (zero corespunde primului)”

Nu mă înțelege greșit, articolul nu poate exista în forma sa actuală. Nu fi leneș, rescrie-l.
Ai o mare responsabilitate! Sunt serios. Paginile site-ului dvs. sunt incluse în prima pagină a rezultatelor Yandex. Mulți oameni au început deja să-ți repete greșelile.

Noroc! O poți face!

:
Știu asta de mult timp, este doar dificil să recitesc 200 de articole în mod constant pentru a corecta ceva. Iar unele tipuri nepoliticoase scriu în așa fel încât chiar și știind ce este mai bine de corectat, nu sunt deloc dispuși să o corecteze.

Voi fi bucuros să corectez alte erori. corectați eventualele inexactități dacă apar. Apreciez ajutorul tau. mulțumesc, știu asta de mult timp, este doar dificil să recitesc 200 de articole în mod constant pentru a corecta ceva. Iar unele tipuri nepoliticoase scriu în așa fel încât chiar și știind ce este mai bine de corectat, nu sunt deloc dispuși să o corecteze.
Cu caracterul tău b = (); Acest lucru nu este deloc zero. Ar trebui măcar să verifice.
dacă vorbim despre caracterul nul „” ; Știam bine, când am umplut rândul cu ea, că scopul este să arăt o curățenie reală, și nu ceva vizibil pentru ochi, pentru că rândul include gunoi, care uneori îți stau în cale. Ar trebui să fii mai atent cu termenii, „simbol de terminare nul” sau doar „simbol nul”, nu un terminator))) Și simbolul de terminare sună foarte bine.

Voi moderniza articolul, dar nu voi trece la stilul altcuiva. Dacă cred că este mai ușor pentru un începător să înțeleagă în acest fel decât așa cum își dorește, atunci o voi lăsa așa. Nu mă înțelege greșit nici pe mine. Cuvântul „semn” este mult mai ușor de înțeles și de amintit pentru un începător slab decât definiția și numele fiecărui semn. Nu este deloc greșeală în asta, este un semn - un semn. Mai puțin accent pe unul dă mai mult accent pe celălalt.

Voi fi bucuros să corectez alte erori. corectați eventualele inexactități dacă apar. Apreciez ajutorul tau. Multumesc.

Salut din nou!
vreau sa clarific. Termenul „zero-terminator” (terminator din engleză limitator) a fost folosit de profesorul meu de la universitate. Se pare că asta e școala veche!
Cât despre resetarea rândurilor.
char b = (); Aceasta este cu adevărat o resetare. Întreaga matrice este umplută cu zerouri. Dacă nu mă crezi, verifică-l!
Dacă luăm în considerare o linie în sensul său natural, de zi cu zi, atunci o linie „goală” va fi o linie în care nu există un singur caracter. Prin urmare, în 99,9% din cazuri este suficient să puneți un caracter nul la început. În mod obișnuit, un șir este procesat până la primul caracter nul, iar caracterele care vin după el nu mai sunt importante. Am înțeles că ai vrut să resetați linia. Tocmai am decis să ofer o opțiune clasică testată în timp.

:
Când „De obicei, procesarea șirurilor ajunge până la primul caracter nul și ce caractere vin după acesta nu mai este important” - da, șirul este anulat
Dacă luăm în considerare „reducerea la zero a tuturor celulelor unui rând (despre care am scris)” - nu, nu zero, și chiar și primul caracter nu este zero. Am bifat varianta asta. MinGW(CodeBlock) - întreaga matrice oferă caracterul „a”
Nu cred că acesta este un motiv de dezbatere.