2 Typy趎ych


2. Typy danych

2.1. Zmienne i sta艂e

i=5;

0x08 graphic

2.2. Identyfikatory czyli nazwy

Poprawne nazwy

Niepoprawne nazwy

licznik_12

12_licznik

test12

test-12

test_12

test..12

2.3. S艂owa kluczowe

2.4. Podstawowe typy danych

0x08 graphic

2.4.1. Typy arytmetyczne

0x08 graphic

D艂ugi format nazwy typu

Kr贸tki format nazwy typu

char

signed char

unsigned char

signed short int

unsigned short int

signed int

unsigned int

signed long int

unsigned long int

float

double

long double

char

signed char

unsigned char

short

unsigned short

int (lub signed)

unsigned

long

unsigned long

float

double

long double

Nazwa typu

Zakresy przechowywanych warto艣ci
(standard
ANSI/ISO)

Do czego s艂u偶y

Typy ca艂kowite

char

Musi by膰 wystarczaj膮co du偶y, aby mo偶na by艂o przechowa膰 w nim dowolny znak ze zbioru wspieranego przez implementacj臋, np. 127 znak贸w zbioru podstawowego ASCII lub 255 znak贸w zbioru rozszerzonego ASCII. Zmienna typu char przyjmuje warto艣ci takie jak signed聽char lub unsigned聽char w聽zale偶no艣ci od implementacji.

bardzo ma艂e liczby ca艂kowite, kody znak贸w, np. ASCII

signed char

-127 do 127

bardzo ma艂e liczby ca艂kowite, kody znak贸w, np. ASCII

unsigned char

0 do 255

bardzo ma艂e liczby ca艂kowite dodatnie, kody ASCII

int

Obiekty typu int zajmuj膮 jedno s艂owo;

Je艣li w danym systemie operacyjnym przyj臋te jest s艂owo 16 bitowe oznacza to liczby z聽zakresu --32 768 do 32 767;

Je艣li za艣 s艂owo wynosi 32 bity, zakres liczb wynosi od -2聽147聽483聽648

do 2 147 483 647

艣rednie lub du偶e liczby ca艂kowite

short int

Co najmniej po艂ow臋 s艂owa; jednak w聽komputerach 16 bitowych przyj臋te jest, 偶e typ short i int maj膮 ten sam rozmiar

艣rednie liczby ca艂kowite

long int

Co najmniej tyle co int;

w聽komputerach 16 bitowych przyj臋te jest u偶ywa膰 dwa s艂owa, w komputerach 32 bitowych zazwyczaj int i long int maj膮 te same rozmiary

du偶e liczby ca艂kowite

unsigned int

Taki sam rozmiar jak dla int.

Dla int 16 bitowego oznacza to warto艣ci od 0 do 65 535 ; za艣 dla int 32 bitowego od 0 do 4 294 967 295

艣rednie lub wi臋ksze liczby ca艂kowite dodatnie

unsigned short int

Taki sam rozmiar co short聽int;

Dla short 16 bitowego oznacza to warto艣ci od 0 do 65 535.

艣rednie liczby ca艂kowite dodatnie

unsigned long int

Taki sam rozmiar co long聽int;

Dla long聽int 32 bitowego oznacza to warto艣ci od 0 do 4 294 967 295

bardzo du偶e liczby ca艂kowite dodatnie

Typy rzeczywiste

float

zale偶y od implementacji, zbi贸r warto艣ci float stanowi podzbi贸r warto艣ci double

liczby rzeczywiste przedstawione z聽pojedyncz膮 dok艂adno艣ci膮 - przyk艂adowo ma艂e liczby rzeczywiste o 7聽cyfrach dok艂adno艣ci

double

zawiera co najmniej zbi贸r warto艣ci float, co najmniej taka dok艂adno艣膰 jak float,

liczby rzeczywiste przedstawione z聽podw贸jn膮 dok艂adno艣ci膮 - przyk艂adowo du偶e liczby rzeczywiste o 15聽cyfrach dok艂adno艣ci

long double

zawiera zbi贸r warto艣ci double, co聽najmniej taka dok艂adno艣膰 jak double,

bardzo du偶e liczby rzeczywiste (18聽cyfr dok艂adno艣ci)

Nazwa typu

Rozmiar (bity)

Zakres przechowywanych warto艣ci

Do czego s艂u偶y

ca艂kowity

liczba ca艂kowita

short int

16

-32768 do 32767

艣rednie liczby ca艂kowite

int

16

-32768 do 32767

艣rednie liczby ca艂kowite

long int

32

-2 147 483 648 do

2 147 483 647

du偶e liczby ca艂kowite

modyfikacje

dodatnia liczba ca艂kowita

unsigned int

16

0 do 65535

wi臋ksze liczby ca艂kowite dodatnie

unsigned long int

32

0 do 4 294 967 295

bardzo du偶e liczby ca艂kowite dodatnie

zmiennopozycyjny

liczba rzeczywista

float

32

1,1*10-38 do 3,4*10 38

ma艂e liczby rzeczywiste (7聽cyfr dok艂adno艣ci)

double

64

2,2*10-308 do 1,7*10308

du偶e liczby rzeczywiste (15聽cyfr dok艂adno艣ci)

long double

80

3,3*10-4917 do 1,1*104932

bardzo du偶e liczby rzeczywiste (18聽cyfr dok艂adno艣ci)

znakowy (specjalny ca艂kowity)

znak lub ma艂a liczba ca艂kowita

char

8

-128 do 127

bardzo ma艂e liczby ca艂kowite, znaki ASCII

signed char

8

-128 do 127

unsigned char

8

0 do 255

bardzo ma艂e liczby ca艂kowite dodatnie, pe艂en zestaw kod贸w PC

Uwaga:

  1. Typ char w r贸偶nych kompilatorach mo偶e by膰 interpretowany jako signed char lub unsigned char. Ustawienie to prawie zawsze da si臋 zmieni膰.

  1. Borland C++ domy艣lnie przyjmuje, 偶e char oznacza signed char, o ile u偶ytkownik nie zmieni ustawienia domy艣lnego.

2.4.2. Typ logiczny bool

2.5. Nadawanie typu zmiennym i sta艂ym

int licznik; /* zmienna typu int o nazwie licznik

(mo偶e przechowywa膰 liczby ca艂kowite z zakresu okre艣lonego typem int) */

int a,b,c; /* trzy zmienne a, b, c tego samego typu */

double suma; /* zmienna typu double o nazwie suma

(mo偶e przechowywa膰 l. rzeczywiste z zakresu okre艣lonego typem double)*/

char znak; /* zmienna typu char o nazwie znak

(mo偶e przechowywa膰 znaki lub ma艂e liczby ca艂kowite

z zakresu okre艣lonego typem char)*/

bool flaga; /* zmienna typu bool o nazwie flaga

(mo偶e przechowywa膰 warto艣膰 true lub false ) */

int licznik = 0; // sta艂a 0 typu int: liczba bez kropki dziesi臋tnej

double suma = 0.; // sta艂a 0 typu double: liczba z kropk膮 dziesi臋tn膮

char c='*'; // sta艂a * typu char: znak z apostrofach

bool b=false; // sta艂a false typu bool: jedna z dw贸ch warto艣ci false

// lub true

2.6. Nadawanie warto艣ci zmiennym

int ile,liczba=20; /* ile nie ma warto艣ci pocz膮tkowej */

float powierzchnia=4.5;

long odl_od_Ksiezyca=238857;

// Przyk艂ad b艂臋dnie dzia艂aj膮cego programu

#include <iostream.h>

int main()

{

int k;

cout << "Wartosc k: " << k << endl;

return 0;

}

Program si臋 skompilowa艂 i mo偶na by艂o go uruchomi膰. Kompilator Borland C++ ostrzeg艂 tylko: Possible use of 'k' before definition. Jednak偶e wynik wykonania programu jest przypadkowy:

Wartosc k: 12

int ile;

float powierzchnia;

ile=20; // przypisanie

powierzchnia=4.5; // przypisanie

int ile;

cin >> ile;

2.7. Sta艂e

2.7.1. Sta艂e liczbowe - ca艂kowite i zmiennopozycyjne

0 1234 -1234

3.14 3. 0.14 .14 1.2e5 2e-5 0.0 0.

gdzie:

1.2e5 oznacza 1,2*105

2e-5 oznacza 2*10-5

Sta艂a

Typ sta艂ej

1000L

long int - litera L za liczb膮 ca艂kowit膮

1024l

long int - litera l za liczb膮 ca艂kowit膮

128u

unsigned int - litera u za liczb膮 ca艂kowit膮 (ma艂a lub wielka)

1010LU

unsigned long int - litery LU za liczb膮 (w dowolnej kolejno艣ci)

3.14f

float - litera f za liczb膮 z kropk膮 dziesi臋tn膮 (ma艂a lub wielka)

1.0L

long double - litera L za liczb膮 z kropk膮 dziesi臋tn膮 (ma艂a lub wielka)

R贸偶ne zapisy sta艂ej ca艂kowitej

2.7.2. Sta艂e logiczne

Sta艂e logiczne maj膮 dwie warto艣ci: true i false.

2.7.3. Sta艂e znakowe

'a' (kod 97) - kompilator zapami臋tuje znak 'a' jako liczb臋 97

'A' (kod 65)

'0' (kod 48)

'8' (kod 56)

' ' (kod 32)

char znak; // deklaracja zmiennej typu char

znak='a'; // przypisanie warto艣ci kodu znaku 'a'

znak=97; // to samo - kod podany dziesi臋tnie

'\n' - koniec linii (ang. new line), kod ASCII 10

'\r' - przesuni臋cie do pocz膮tku wiersza (ang. carriage return), kod ASCII 13

'\a' - sygna艂 d藕wi臋kowy (ang. alert), kod ASCII 7

'\0' - znak pusty (ang. null), kod ASCII 0

char znak;

znak='a'; // przypisanie warto艣ci kodu znaku 'a'

znak=97; // to samo - kod podany dziesi臋tnie

znak=0141; // to samo - kod podany 贸semkowo

znak=0x61; // to samo - kod podany szesnastkowo

znak='\141'; // to samo - kod 贸semkowy

znak='\x61'; // to samo - kod szesnastkowy

2.7.4. Sta艂e napisowe

"Witamy"

cout << "Witamy!";

cout << "Witamy!\n";

cout << "Witamy\nw szkole\n");

cout << "Lp.\tNazwisko";

2.8. Modyfikator typu const

const int id=12345;

const int max=100;

...

id=10000; // B艁膭D! Pr贸ba przypisania nowej warto艣ci

int tab[max]; // Poprawne u偶ycie: sta艂a mo偶e by膰

// u偶ywana do okre艣lenia wymiaru tablicy

const int odlegloscMile = 3959;

const int odlegloscKm = 1.609*odlogloscMile;

2.9. Definiowanie nazw typ贸w - typedef

typedef float realType

oznacza to, 偶e mo偶na teraz wymiennie u偶ywa膰 float i realType

Zastosowania

#include <iostream.h>

int main()

{

typedef float real; // real jest synonimem float

const real PI=3.14159;

real promien;

cout << "Wpisz promien:";

cin >> promien;

real obwod=2*PI*promien;

cout << "Obwod=" << obwod << endl;

return 0;

}

Zmiana typu zmiennych u偶ywanych do oblicze艅 sprowadzi si臋 do wymiany instrukcji

typedef float real

na:

typedef double real;

typedef unsigned char uchar;

Odt膮d zamiast unsigned char mo偶na pisa膰 uchar.

Przyk艂ad:

Za艂贸偶my, 偶e w聽pewnych zastosowaniach sieciowych potrzebujemy pos艂ugiwa膰 si臋 liczbami umieszczonymi na 32 bitach (przyk艂adem jest adres IP). Mogliby艣my skorzysta膰 z typu unsigned int, ale typ int mo偶e zajmowa膰 2聽(czyli 16 bit贸w) lub 4 bajty (32 bity) w zale偶no艣ci od komputera. Chcemy napisa膰 program, kt贸ry 艂atwo b臋dzie mo偶na przenosi膰. Za艂贸偶my, 偶e nasz komputer przeznacza na typ unsigned int 32 bity. Mo偶emy zatem zdefiniowa膰 typ o nazwie uint32 jako:

typedef unsigned int uint32

Tym typem b臋dziemy si臋 pos艂ugiwa膰 wsz臋dzie tam, gdzie b臋dziemy definiowali zmienne wymagaj膮ce 32聽bit贸w. Je艣li teraz program zostanie przeniesiony na komputer, na kt贸rym unsigned int zajmuje 2聽bajty, za艣 unsigned long int zajmuje 4 bajty, wystarczy w odpowiednim pliku nag艂贸wkowym zmieni膰 jedn膮 definicj臋:

typedef unsigned long int uint32

10

Bo偶ena 艁opuch

Podstawy programowania

Materia艂y do wyk艂ad贸w

(2001)

sta艂a

zmienna

Typy danych w C++

Typ niezdefiniowany void

Typy proste

Typy z艂o偶one

Typy ca艂kowite

Typy rzeczywiste

Arytmetyczne

Wska藕niki

Typ wyliczeniowy

Typ logiczny

Referencje

Pole zacienione:

tych typ贸w
nie ma w C

char (znakowy)

int (ca艂kowity)

float (zmiennopozycyjny pojedynczej precyzji)

double (zmiennopozycyjny podw贸jnej precyzji)

Typ podstawowy

Kwalifikatory

signed

(ze znakiem)

unsigned

(bez znaku)

short

(kr贸tki)

long

(d艂ugi)



Wyszukiwarka