C/Składnia: Różnice pomiędzy wersjami

Przejdź do nawigacji Przejdź do wyszukiwania
Dodane 390 bajtów ,  15 lat temu
→‎Typy danych: + _Bool, _Complex; poprawienie nieścisłości w rozmiarze (mieszanie bitów z bajtami) i wywalenie rozmiaru poza tabelke
m (wikitable)
(→‎Typy danych: + _Bool, _Complex; poprawienie nieścisłości w rozmiarze (mieszanie bitów z bajtami) i wywalenie rozmiaru poza tabelke)
== Typy danych ==
{| class="wikitable" cellspace=20
! Typ !! Rozmiar w bitach !! Opis !! Inne nazwy
|-
! align=center colspan=43|Typy danych w/g norm C89 i C90
|-
| '''char'''
| align=center| ≥ 8
|
* Służy głównie do przechowywania znaków
* Podstawowy typ danych w języku C
* Od kompilatora zależy czy jest to liczba ze znakiem czy bez; w większości kompilatorów jest liczbą ze znakiem
* Przechowuje wszystkie ośmiobitowe sposoby kodowania znaków (np. ASCII)
|
* Wielkość pozostałych typów jest zwykle całkowitą wielokrotnością rozmiaru '''char'''
* W większości kompilatorów jest tożsamy z typem '''signed char'''
| -
|-
| '''signed char'''
| align=center| = '''sizeof'''('''char''')
|
* Typ char ze znakiem
|
* Może przechowywać liczby całkowite z zakresu od -128 do 127
| -
|-
| '''unsigned char'''
| align=center| = '''sizeof'''('''char''')
|
* Typ char bez znaku
|
* Może przechowywać liczby całkowite z zakresu od 0 do 255
| -
|-
| '''short'''
| align=center| '''sizeof'''('''int''') ≥ 16, ≥ '''sizeof'''('''char''')
|
* Występuje, gdy docelowa maszyna wyszczególnia krótki typ danych całkowitych, w przeciwnym wypadku jest tożsamy z typem '''int'''
|-
| '''unsigned short'''
| align=center| = '''sizeof'''('''short''')
|
* Liczba typu '''short''' bez znaku
|-
| '''int'''
| align=center| '''sizeof'''('''long int''') ≥ 32,16, ≥ '''sizeof'''('''short''')
|
* Liczba całkowita, odpowiadająca rozmiarowi podstawowemu rozmiarowi liczby całkowitej w danym komputerze.
* Podstawowy typ dla liczb całkowitych
| '''signed int''', '''signed'''
* Zwykle ma rozmiar podwójnego słowa maszynowego
| '''signed int'''
|-
| '''unsigned'''
| -
* Liczba całkowita bez znaku
| '''unsigned int'''
| -
| align=center| = '''sizeof'''('''int''')
| '''long'''
|
* LiczbaDługa liczba całkowita bez znaku
|-
| '''longunsigned intlong'''
| align=center| 64,32 ≥ '''sizeof'''('''int''')
|
* Długa liczba całkowita
| '''long int''', '''signed long''', '''signed long int'''
* Zależnie od maszyny liczba ma rozmiar podwójnego lub poczwórnego słowa maszynowego
| '''long''', '''signed long''', '''signed long int'''
|-
| '''float'''
| align=center| ≥ '''sizeof'''('''char''')
|
* Podstawowy typ do przechowywania liczb zmiennoprzecinkowych
* W nowszym standardzie zgodny jest z normą [[w:en:IEEE 754|IEEE 754]]
* Nie można stosować go z modyfikatorem '''signed''' ani '''unsigned'''
| -
|-
| '''double'''
| align=center| ≥ '''sizeof'''('''float''')
|
* Liczba zmiennoprzecinkowa podwójnej precyzji
* Podobnie jak float nie łączy się z modyfikatorem '''signed''' ani '''unsigned'''
| -
|-
| '''long double'''
| align=center| ≥ '''sizeof'''('''double''')
|
* Największa możliwa dokładność liczb zmiennoprzecinkowych
* Nie łączy się z modyfikatorem '''signed''' ani '''unsigned'''
| -
|-
! colspan=43|Typy danych według normy C99
| -
| '''_Bool'''
|
* Przechowuje wartości 0 lub 1
|
|-
| '''long long int'''
| align=center| ≥ 64, ≥ '''sizeof'''('''long int''')
|
* Nowy typ, umożliwiający obliczeniach na bardzo dużych liczbach całkowitych bez użycia typu float
| '''long long int''', '''signed long long''', '''signed long long int'''
|-
| '''unsigned long long int'''
| align=center| ≥ 64, ≥ '''sizeof'''('''long int''')
|
* Długie liczby całkowite bez znaku
| '''unsigned long long int'''
|-
| '''float _Complex'''
! colspan=4|Typy danych definiowane przez użytkownika
|
* Słuzy do przechowywania liczb zespolonych
|
| -
| '''double _Complex'''
|
* Słuzy do przechowywania liczb zespolonych
|
|-
| '''long double _Complex'''
|
* Słuzy do przechowywania liczb zespolonych
|
|-
! colspan=43|Typy danych definiowane przez użytkownika
|-
| '''struct'''
| align=center| Suma rozmiarów pól struktury + ewentualne dopełnienie<ref>Patrz - rozdział [[C/Więcej o kompilowaniu|Więcej o kompilowaniu]].</ref>
|
* Rozmiar zależy od typów danych, umieszczonych w strukturze plus ewentualne dopełnienie<ref>Patrz - rozdział [[C/Więcej o kompilowaniu|Więcej o kompilowaniu]].</ref>
| -
|-
| '''union'''
|
| align=center| Rozmiar największego pola
* Rozmiar typu jest taki jak rozmiar największego pola
| -
| -
|-
| '''typedef'''
| align=center| Rozmiar typu źródłowego
|
* Nowo zdefiniowany typ przyjmuje taki sam rozmiar, jak typ macierzysty
| -
|-
| '''enum'''
| align=center| &ge; '''sizeof'''('''char''')
|
* Zwykle elementy mają taką samą długość, jak typ '''int'''.
|-
|}
 
Zależności rozmiaru typów danych są następujące:
* sizeof(''cokolwiek'') = sizeof('''signed''' ''cokolwiek'') = sizeof('''unsigned''' ''cokolwiek'');
* 1 = sizeof('''char''') &le; sizeof('''short''') &le; sizeof('''int''') &le; sizeof('''long''') &le; sizeof('''long long''');
* sizeof('''float''') &le; sizeof('''double''') &le; sizeof('''long double''');
* sizeof(''cokolwiek'' '''_Complex''') = 2 * sizeof(''cokolwiek'')
* sizeof('''void *''') = sizeof('''char *''') &ge; sizeof(''cokolwiek'' '''*''');
* sizeof(''cokolwiek'' '''*''') = sizeof('''signed''' ''cokolwiek'' '''*''') = sizeof('''unsigned''' ''cokolwiek'' '''*''');
* sizeof(''cokolwiek'' '''*''') = sizeof('''const''' ''cokolwiek'' '''*''').
 
Dodatkowo, jeżeli przez V(typ) oznaczymy liczbę bitów wykorzystywanych w typie to zachodzi:
* 8 &le; V('''char''') = V('''signed char''') = V('''unsigned char''');
* 16 &le; V('''short''') = V('''unsigned short''');
* 16 &le; V('''int''') = V('''unsigned int''');
* 32 &le; V('''long''') = V('''unsigned long''');
* 64 &le; V('''long long''') = V('''unsigned long long''');
* V('''char''') &le; V('''short''') &le; V('''int''') &le; V('''long''') &le; V('''long long''').
 
<noinclude>
{{Przypisy}}
279

edycji

Menu nawigacyjne