c cxx w04

background image

Podstawy programowania

Podstawy programowania

w j

w języku C i C++

ęzyku C i C++

Operatory i wyrażenia

Część czwarta

Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa.

Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne.

Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.

Roman Simiński

roman.siminski@us.edu.pl
www.us.edu.pl/~siminski

Autor

Kontakt

background image

Operatory arytmetyczne

Operatory arytmetyczne

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

2

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Operatory arytmetyczne to

+

: dodawanie (dwuargumentowy) i zachowanie znaku (jednoargumentowy),

: odejmowanie (dwuargumentowy) i zmiana znaku (jednoargumentowy),

*

: mnożenie (dwuargumentowy),

/

: dzielenie (dwuargumentowy),

%

: (dwuargumentowy)reszta z dzielenia (modulo), nie może być stosowany

do liczb rzeczywistych.

background image

Uwaga — dzielenie na operandach całkowitych daje wynik całkowity

Uwaga — dzielenie na operandach całkowitych daje wynik całkowity

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

3

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Ten kod:

int x = 5, y = 2;

float f = x/y;

cout << ”Wynik dzielenia ” < < x << ”przez ” << y << ” wynosi ” << f ;

wyprodukuje:

Aby otrzymać wynik rzeczywisty jeden z operandów musi być rzeczywisty:

float x = 5;
int y = 2;

float f = x/y;

int x = 5, y = 2;

float f =

( float )

x/y;

Rzutowanie (konwersja) typów w wyrażeniu

lub

background image

Operatory relacji i operatory logiczne

Operatory relacji i operatory logiczne

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

4

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Operatory relacji to :

>

,

>=

,

<

,

<=

.

Operatory porównania

==

,

!=

.

Operatory logiczne to

&&

(and) oraz

||

(or).

Wyrażenia połączone tymi operatorami oblicza się od lewej do prawej, koniec
obliczeń następuje natychmiast po określeniu wartości logicznej wyrażenia.

Operatory relacji mają wyższy priorytet niż operatory porównania.

Priorytet operatora && jest wyższy niż || a oba są niższe niż operatorów relacji i
porównania. Dlatego poniższy warunek może być zapisany bez nawiasów:

while( c >= ’A’ && c <= ’Z’ )
{
. . .
}

while( ( c >= ’A’ ) && ( c <= ’Z’ ) )
{
. . .
}

zamiast

Uwaga:

background image

Operatory relacji i operatory logiczne, przykład wykorzystania

Operatory relacji i operatory logiczne, przykład wykorzystania

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

5

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Czy rok w zmiennej całkowitej year jest przestępny?

if(

( year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0

)

cout << ”Rok ” << year << ” jest rokiem przest pnym”;

ę

else
cout << ”Rok ” << year << ” nie jest rokiem przest pnym”;

ę

Czy zmienna znakowa c jest cyfrą lub małą literą?

if(

( c >= '0' && c <= '9' ) || ( c >= 'a' && c <= 'z' )

)

cout << ”Cyfra lub mała litera”;
else
cout << ”To nie jest ani cyfra, ani mała litera”;

Czy zmienna znakowa c jest cyfrą szesnastkową?

if(

( c>='0' && c<='9' ) || ( c>='a' && c<='f' ) || ( c>='A' && c<='F' )

)

cout << ”Cyfra szesnastkowa”;
else
cout << ”To nie jest cyfra szesnastkowa”;

background image

Operatory zwiększania ++ i zmniejszania —―

Operatory zwiększania ++ i zmniejszania —―

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

6

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Operatory

++

i

—―

zawsze powodują odpowiednio zwiększenie lub zmniejszenie

wartości argumentu. Mogą one jednak występować jako przedrostki (ang. prefix)
lub przyrostki (ang. postfix).

licznik = licznik + 1;
i = i – 1;

licznik++;
i--;

++licznik;
--i;

background image

Operatory zwiększania ++ i zmniejszania —―

Operatory zwiększania ++ i zmniejszania —―

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

7

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Wersja przedrostkowa zwiększa (zmniejsza) wartość argumentu przed użyciem
jego wartości
.

Wersja przyrostkowa zwiększa (zmniejsza) wartość argumentu po użyciem jego
wartości
.

int a = 5, b;

b =

++a

;

a ==

6

, b ==

6

int a = 5, b;

b =

a++

;

a ==

6

, b ==

5

int licznik = 0;

cout << ”Licznik: ” <<

licznik

;

licznik++

;

...

licznik++

;

cout << ”Licznik: ” <<

licznik

;

int licznik = 0;

cout << ”Licznik: ” <<

licznik++

;

...

cout << ”Licznik: ” <<

++licznik

;

background image

Operatory zwiększania ++ i zmniejszania —―

Operatory zwiększania ++ i zmniejszania —―

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

8

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

for( int licznik = 10; licznik > 0; cout << endl <<

licznik--

<< "..." )

;

for( int licznik = 10; licznik > 0;

licznik--

)

cout << endl <<

licznik

<< "...";

Wykorzystując operatory

++

i

—―

iterację:

Można zapisać krócej:

Na operatory ++ i ―― trzeba uważać:

i = ++i---i+++i+i--;

i = ++i - --i + ++i + i--;

?

background image

Operatory bitowe

Operatory bitowe

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

9

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Operatory bitowe mogą być stosowane do argumentów typu całkowitego, są to:

Operator

Znaczenie

&

bitowa koniunkcja (and),

|

bitowa alternatywa (or),

^

bitowa różnica symetryczna (xor),

<<

przesunięcie w lewo,

>>

przesunięcie w prawo,

~

dopełnienie jedynkowe.

z = x & y;

0...0101
0...0111
0...0101 z == 5

int x = 5, y = 7, z;

z = x | y;

0...0101
0...0111
0...0111 z == 7

z = x ^ y;

0...0101
0...0111
0...0010 z == 2

background image

Operatory bitowe, przykłady zastosowania

Operatory bitowe, przykłady zastosowania

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

10

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Ustawianie pewnych bitów liczby:

flag = flag | 1;

// Ustawienie najmłodszego bitu liczby flag

Zerowanie pewnych bitów liczby:

flag = flag & ~1;

// Wyzerowanie najmłodszego bitu flag

Niech będzie zadeklarowana zmienna flag, o rozmiarze 1-go bajta:

unsigned char flag = 0;

Testowanie czy pewne bity liczby są ustawione:

if( flag & 1 )

// Czy najmłodszy bit jest ustawiony?

. . .

background image

Operatory bitowe, przykłady zastosowania

Operatory bitowe, przykłady zastosowania

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

11

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

enum FileMode
{

FMReadOnly = 1

,

// 0...0001

FMWriteOnly = 2

,

// 0...0010

. . .
};

. . .

char znak;

int fMode = 0;


cout << "Podaj tryb otwarcia\nr: odczyt\nw: zapis\n>";
cin >> znak;
switch( znak )
{
case 'r' :
case 'R' :

fMode = fMode | FMReadOnly

;

break;
case 'w' :
case 'W' :

fMode = fMode | FMWriteOnly

;

break;
// . . .
}

background image

Operatory bitowe, przykłady zastosowania

Operatory bitowe, przykłady zastosowania

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

12

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

if(

fMode & FMReadOnly

)

cout << "Otwarcie tylko do odczytu";
. . .
if(

fMode & FMWriteOnly

)

cout << "Otwarcie tylko do zapisu";

Testowanie trybu otwarcia:

fMode = fMode & ~FMReadOnly;

. . .

fMode = fMode & ~FMWriteOnly;

Czyszczenie określonego trybu otwarcia:

fMode = fMode | ( FMReadOnly | FMWriteOnly );

Ustawienie trybu otwarcia do zapisu i odczytu:

if( fMode & ( FMReadOnly | FMWriteOnly ) )

cout << "Otwarcie do zapisu i odczytu";

Testowanie trybu otwarcia do zapisu i odczytu:

background image

Operatory bitowe, przesunięcia bitowe

Operatory bitowe, przesunięcia bitowe

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

13

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Przesunięcie o jeden bit w prawo:

unsigned char flag = 128;

// 10000000

flag = flag >> 1;

// 01000000

flag = flag >> 1;

// 00100000

Uwaga na bit znaku:

signed char flag = 128;

// 10000000

flag = flag >> 1;

// 11000000

flag = flag >> 1;

// 11100000

Przesunięcie o jeden bit w lewo:

unsigned char flag = 1;

// 00000001

flag = flag << 1;

// 00000010

flag = flag << 1;

// 00000100

background image

Operatory bitowe, przesunięcia bitowe — przykład wykorzystania

Operatory bitowe, przesunięcia bitowe — przykład wykorzystania

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

14

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Ile bitów ma liczba typu int w danej implementacji (iteracja while)?

int number = 1, counter = 0;

while( number != 0 )
{

number = number << 1

;

counter ++;
}

cout << "Liczba bitów typu int: " << counter;

Ile bitów ma liczba typu int w danej implementacji (iteracja for)?

int number = 1, counter = 0;

for( ; number != 0; counter++ )

number = number << 1

;

cout << "Liczba bitów typu int: " << counter;

background image

Operatory przypisania

Operatory przypisania

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

15

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Przypisanie wartości jest w języku C/C++ wyrażeniem a nie instrukcją. Operator
przypisania = jest lewostronnie łączny, co umożliwia łączenie przypisań:

int i = 5, j, k, l;
j = k = l = i;

Zamiast:

j = ( k = ( l = ( i + 5 ) ) + 10 ) * 2; // j == 40, k == 20, l == 10

x = sin( alfa );

if(

x == 0

)

{
...
}

if(

( x = sin( alfa ) )

== 0 )

{
...
}

l = i + 5;
k = l + 10;
j = k * 2;

można napisać:

Często:

background image

Operatory przypisania, cd. ...

Operatory przypisania, cd. ...

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

16

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Dla większości operatorów dwuargumentowych:

+ - * / % << >> * ^ & |

można wykorzystywać specjalne operatory przypisania, pozwalające skrócić zapis
często wykorzystywanych konstrukcji, takich jak:

i = i + 2
y = y * 2
x = x << 1
j = j * ( k + 1 )
flag = flag >> k;

i += 2
y *= 2
x <<= 1
j *= k + 1
flag >>= k;

Wersja z normalna

Wersja skrócona

background image

Operatory przypisania, cd. ...

Operatory przypisania, cd. ...

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

17

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Ogólnie, jeśli expr1 i expr2 to wyrażenia, a op to operator dwuargumentowy,
zapis:

expr1 = expr1 op expr2

można uprościć do postaci:

expr1 op= expr2

background image

Operator warunkowy

Operator warunkowy

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

18

Strona :

O p e r a t o r y i w y r a ż e n i a

O p e r a t o r y i w y r a ż e n i a

Bardzo często spotyka się pewne „symetryczne” instrukcje warunkowe, np.:

if( delta < 0 )
brak_rozw_rzecz = 1;
else
brak_rozw_rzecz = 0;

if( a > b )
max = a;
else
max = b;

Można je zapisać krócej, z wykorzystaniem operatora warunkowego:

brak_rozw_rzecz = ( delta < 0 ) ? 1 : 0;

max = ( a > b ) ? a : b;

Inny przykład — komunikaty w wersji polskiej lub angielskiej:

enum WERSJA_JEZYKOWA { POLSKI, ANGIELSKI };
int jezyk = POLSKI;
. . .
puts( ( jezyk == POLSKI ) ? ”Podaj warto ć: ” : ”Input value:” );

ś


Document Outline


Wyszukiwarka

Podobne podstrony:
RBD W04
W04 2
W04 3
W04 4
c cxx w02
cps w04 v9
PI w04
Elektronika W04
zj w04
gs w04 id 197501 Nieznany
223 B8 4 A W04 zestawienie slus Nieznany
bal w04
krs form w04
KZ BD w04
Gazownictwo w04
c cxx w09
c cxx w13

więcej podobnych podstron