jezc w09 bity op

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

[

i

+

2

]

+

(

a

<

0

?

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


Wyszukiwarka

Podobne podstrony:
Prezentacja OP silniki
W09 Ja wstep ROZ

więcej podobnych podstron