Typy danych w języku C


Typy danych (proste)

Typy danych:

typ danych

rozmiar w bitach [b]/bajtach [B]

opis

zakres liczb

int

(16/32/64)/(2/4/8)

nie zdefiniowana wielkość typu całkowitego

...

short int

16/2

+/- całkowity krótki ze znakiem

od -215 do 215

unsigned short int

16/2

całkowity krótki bez znaku

od 0 do 216

long int

32/4

+/- całkowity ze znakiem

od -231 do 231

unsigned long int

32/4

całkowity bez znaku

od 0 do 232

long long int

64/8

+/- całkowity długi ze znakiem

od -263 do 263

unsigned long long int

64/8

całkowity długi bez znaku

od 0 do 264

char

8/1

znak ASCII lub liczba całkowita

od -128 do 128

unsigned char

8/1

znak ASCII lub liczba całkowita (bez znaku)

od 0 do 255

float

32/4

liczba zmiennoprzecinkowa pojedynczej precyzji

od 3,4*1038 do 3,4*1038

double

64/8

liczba zmiennoprzecinkowa podwójnej precyzji

od 1,8*10308 do 1,8*10308

signed - wartość ze znakiem
unsigned - wartość bez znaku

przykład:
unsigned long - jest to liczba 32 bitowa bez znaku czyli z przedziału od 0 do 4 mld
signed long - jest to liczba 32 bitowa ze znakiem czyli od -2 do 2 mld
unsigned char - przedział od 0 do 255
signed char - przedział od -128 do 128

W prosty sposób można sprawdzić ile miejsca zmienna zajmuje w pamięci za pomocą funkcji "size of()"

#include <stdlib.h>
#include <stdio.h>

double x;
int y;

int main(int argc, char *argv[])
{
  y=sizeof(x);	//do y będzie wpisana wartość jaką x zajmuje w pamięci (w bajtach)
  printf("%d", y); //wyświetlenie wartości na ekran
  return 0;
}

lub

#include <stdlib.h>
#include <stdio.h>

int y;

int main(int argc, char *argv[])
{
  y=sizeof(double);	//zamiast zmiennej umieszczamy nazwe typu
  printf("%d", y); //wyświetlenie wartości na ekran
  return 0;
}

Rodzaje zmiennych:

- zmienne statyczne - działają przez cały czas działania programu (np. zmienne globalne) lub zmusić samemu aby zmienna była zmienną statyczna poprzez static int=n; wartosc początkowa takiej zmienne bedzię równa 0

- zmienne automatyczne - dzielimy na zmienne lokalne i argumenty funkcji, ich wartość początkowa jest nieokreślona

- zmienne rejestrowe - zmienna taka znajduje się w rejestrach (tzn my sugerujemy aby taka zmienna się tam znalazła, a nie zawsze jest wolny rejestr :]), dzięki czemu jest do niej szybszy dostęp, proponujemy zapis zmiennej w rejestrze w taki sposób register int x;

Przykład zastosowania zmiennych statycznych

#include <stdlib.h>
#include <stdio.h>

long z;
int x,y;

long zliczaj(int a, int b){
    static long suma;
    suma+=a*b;
    return (suma);
}

int main(int argc, char *argv[])
{
printf("Podaj x= ");
scanf("%d",&x);
printf("Podaj y= ");
scanf("%d",&y);
z=zliczaj(x,y); //wywołanie funkcji
printf("%d\n", z); //pierwsze wywołanie funkcji
z=zliczaj(x,y); 
printf("%d\n", z); //drugie wywołanie funkcji
z=zliczaj(x,y); 
printf("%d\n", z); //trzecie wywołanie funkcji
}


www.piotrsog.prv.pl