background image

 

 

© 2012
Grzegorz Łukawski & Maciej Lasota

Politechnika Świętokrzyska w Kielcach

Operacje bitowe

Priorytety operatorów

Wskaźniki do funkcji

Programowanie

w języku C

comm

background image

 

 

Operatory bitowe w języku C

Operatory bitowe w języku C działają tylko na liczbach całkowitych!

|

Suma bitowa (OR)

&

Iloczyn bitowy (AND)

^

Suma modulo 2 (XOR)

~

Dopełnienie jedynkowe (NOT)

background image

 

 

Przesuwanie bitów

Przesuwanie w lewo:

   00110110 

(54)

<<

 01101100 

(108)

<<

 11011000 

(216)

Przesuwanie w prawo:

   00110110 

(54)

>>

 00011011 

(27)

>>

 00001101 

(13)

UWAGA!
Przesuwanie  bitów  w  lewo  odpowiada  mnożeniu  przez  2,  przesuwanie 
w prawo odpowiada dzieleniu całkowitemu przez 2.

background image

 

 

Przesuwanie bitów w języku C

int

 zm = 54;

// Przesunięcie w lewo o 2 pozycje:

int

 zm2 = zm << 2;

// Przesunięcie w prawo:

int

 zm3 = 16 >> 2 | zm;

background image

 

 

Operator(y)

Łączność

1

() [] -> .

lewo

 

2

! ~ ++ -- + - * & (typ) sizeof

prawo

 

3

* / %

lewo

 

4

+ -

lewo

 

5

<< >>

lewo

 

6

< <= > >=

lewo

7

== !=

lewo

8

&

lewo

9

^

lewo

10 |

lewo

11 &&

lewo

12 ||

lewo

13 ?:

prawo

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

prawo

15 ,

lewo

Priorytety operatorów

background image

 

 

wy 

=

 

*

ws 

*

 tb

]

 

+

 

(

?

 0 

:

 a 

a

)

;

wy

ws

tb

i

2

a

0

0

a

a

+

*

*

[]

<

?:

*

+

=

background image

 

 

Wskaźniki do funkcji

Funkcje  w  języku  C  nie  są  zmiennymi,  ale  mimo  wszystko  istnieje 
możliwość  definiowania  do  nich  wskaźników.  Wskaźniki  takie  można 
przekazywać  jako  argument  innej  funkcji,  umieszczać  w  tablicach 
i strukturach, itp.

Deklaracja wskaźnika do funkcji zawiera typ zwracany i listę argumentów 
z ich typami.

background image

 

 

UWAGA!
Deklaracja  wskaźnika  do  funkcji  musi  zawierać  nawiasy  okrągłe, 
w przeciwnym razie zostanie zinterpretowana jako prototyp funkcji.

Wskaźniki do funkcji – przykład

// Deklaracja wskaźnika do funkcji:

int

 (*wsk_fun)(

char

*, 

int

);

// Wywołanie:

int

 x = (*wsk_fun)(tekst, 10);

if

((*wsk_fun)(

"Abcd"

, 4) == 5) 

//...

background image

 

 

Przykład – szukanie maksimum

int

 szuk_max(

char

 *tab[], 

int

 n,

int

 (*cmp)(

const

 

char

*, 

const

 

char

*))

{

int

 max=0, i;

// Wywołanie przez wskaźnik funkcji porównującej:

for

(i=1;i < n;i++)

if

((*cmp)(tab[i], tab[max]) > 0)

max = i;

return

(max);

}

int

 main() {

char

 *teksty[] = {

"Basia"

,

"Ania"

,

"Zuzia"

,

"Kasia"

,

"Ola"

};

int

 maks = szuk_max(teksty, 5, strcmp);

// strcmp

puts(teksty[maks]);

// Zuzia

return

(0);

background image

 

 

int

 numer_cmp(

const

 

char

 *t1, 

const

 

char

 *t2) {

long

 v1 = atol(t1);

long

 v2 = atol(t2);

if

(v1 > v2)

return

(1);

if

(v1 < v2)

return

(-1);

return

(0);

}

int

 main() {

char

 *liczby[] = {

"100"

"0"

"88"

"13333"

"-5"

};

maks = szuk_max(liczby, 5, numer_cmp);

puts(liczby[maks]);

// 13333

return

(0);

}

Przykład – funkcja porównująca


Document Outline