E, wyk04

background image

Elementy definicji j ˛ezyka

Operacje bitowe j ˛ezyka C

Typy stałych

Operatory bitowe j ˛ezyka C

Kurs C z elementami C++

Wykład 4 - Operacje na bitach, definiowanie typów

26 pa´zdziernika 2007

Wykład 4

Kurs C z elementami C++

background image

Elementy definicji j ˛ezyka

Operacje bitowe j ˛ezyka C

Typy stałych

Operatory bitowe j ˛ezyka C

Operatory bitowe j ˛ezyka C

Operatory

Ł ˛

aczno´s´c

( )

[ ]

->

.

lewostronna

!

~

++

--

+

-

*

&

(

typ)

sizeof

prawostronna

*

/

%

lewostronna

+

-

lewostronna

<<

>>

lewostronna

<

<=

>

>=

lewostronna

==

!=

lewostronna

&

lewostronna

^

lewostronna

|

lewostronna

&&

lewostronna

||

lewostronna

? :

prawostronna

=

+=

-=

*=

/=

%=

&=

^=

|=

<<=

>>=

prawostronna

,

lewostronna

Jednoargumentowe operatory +, -, * oraz & maj ˛

a priorytet wy˙zszy

ni˙z ich odpowiedniki dwuargumentowe.

Wykład 4

Kurs C z elementami C++

background image

Elementy definicji j ˛ezyka

Operacje bitowe j ˛ezyka C

Typy stałych

Implementacja zbiorów

zbiory.h

/* Plik naglowkowy: zbiory.h

*/

/*

Bitowa implementacja operacji na zbiorach

*/

#define MAX_ELEM

10000000UL

#define MAX_BYTE

(MAX_ELEM/8+1)

typedef unsigned long int ELEMENT; // po zmianie sprawdzic format drukowania

typedef unsigned char ZBIOR[MAX_BYTE];

/***************** PROTOTYPY FUNKCJI ********************/

void suma_z(const ZBIOR z1,const ZBIOR z2,ZBIOR wynik);

void przekroj_z(const ZBIOR z1,const ZBIOR z2,ZBIOR wynik);

void roznica_z(const ZBIOR z1,const ZBIOR z2,ZBIOR wynik);

void dopelnienie_z(ZBIOR z);

void wyczysc_z(ZBIOR Z);

void dodaj_e(const ELEMENT e,ZBIOR z);

void usun_e(const ELEMENT e,ZBIOR z);

int czy_pusty_z(const ZBIOR

z);

int element_z(const ELEMENT e,const ZBIOR z);

Wykład 4

Kurs C z elementami C++

background image

Elementy definicji j ˛ezyka

Operacje bitowe j ˛ezyka C

Typy stałych

Implementacja zbiorów

zbiory.c - cz ˛e´s´c 1

#include "zbiory.h"

void suma_z(const ZBIOR z1,const ZBIOR z2,ZBIOR wynik)

{

ELEMENT i;

for (i=0; i < MAX_BYTE; ++i)

wynik[i]=z1[i] | z2[i];

}

void przekroj_z(const ZBIOR z1,const ZBIOR z2,ZBIOR wynik)

{

ELEMENT i;

for (i=0; i < MAX_BYTE; ++i)

wynik[i]=z1[i] & z2[i];

}

void roznica_z(const ZBIOR z1,const ZBIOR z2,ZBIOR wynik)

{

ELEMENT i;

for (i=0; i < MAX_BYTE; ++i)

wynik[i]=z1[i] & ~z2[i];

}

Wykład 4

Kurs C z elementami C++

background image

Elementy definicji j ˛ezyka

Operacje bitowe j ˛ezyka C

Typy stałych

Implementacja zbiorów

zbiory.c - cz ˛e´s´c 2

void dopelnienie_z(ZBIOR z)

{

ELEMENT i;

for (i=0; i < MAX_BYTE; ++i)

z[i]=~z[i];

}

void wyczysc_z(ZBIOR z)

{

ELEMENT i;

for (i=0; i < MAX_BYTE; ++i)

z[i]=’\0’;

}

void dodaj_e(const ELEMENT e,ZBIOR z)

{

z[e/8] |= (1 << e % 8);

}

Wykład 4

Kurs C z elementami C++

background image

Elementy definicji j ˛ezyka

Operacje bitowe j ˛ezyka C

Typy stałych

Implementacja zbiorów

zbiory.c - cz ˛e´s´c 3

void usun_e(const ELEMENT e,ZBIOR z)

{

z[e/8] &= ~(1 << e % 8);

}

int czy_pusty_z(const ZBIOR

z)

{

ELEMENT i;

for (i=0; i < MAX_BYTE; ++i)

if (z[i])

return 1;

return 0;

}

int element_z(const ELEMENT e,const ZBIOR z)

{

return z[e/8] & (1 << e % 8);

}

Wykład 4

Kurs C z elementami C++

background image

Elementy definicji j ˛ezyka

Operacje bitowe j ˛ezyka C

Typy stałych

Implementacja zbiorów

sito.c

#include <stdio.h>

#include "zbiory.h"

ELEMENT isqrt(ELEMENT n)

{

ELEMENT i,kwadrat=1,np=3;

if (n <= 3) return 1;

for (i=1; kwadrat <= n-np; ++i,kwadrat+=np,np+=2);

return i;

}

static ZBIOR sito;

Wykład 4

Kurs C z elementami C++

background image

Elementy definicji j ˛ezyka

Operacje bitowe j ˛ezyka C

Typy stałych

Implementacja zbiorów

sito.c - ci ˛

ag dalszy

int main(void)

{

/* znajdowanie liczb pierwszych metoda sita Eratostenesa

*/

int c=0;;

ELEMENT i,j,pierwiastek=isqrt(MAX_ELEM);

wyczysc_z(sito); dopelnienie_z(sito); usun_e(1,sito);

for (i=2; i <= MAX_ELEM; ++i)

if (element_z(i,sito)) {

printf((++c % 8 == 0 ? "%10lu\n" : "%10lu "),i);

if (i <= pierwiastek)

for (j=i*i; j <= MAX_ELEM; j+=i)

if (element_z(j,sito))

usun_e(j,sito);

}

putchar(’\n’);

return 0;

}

Wykład 4

Kurs C z elementami C++

background image

Elementy definicji j ˛ezyka

Operacje bitowe j ˛ezyka C

Typy stałych

Typy stałych całkowitych

Typy stałych zmiennopozycyjnych

Typy stałych całkowitych

Przyrostek

Stała dziesi ˛etna

Stała ósemkowa lub szesnastkowa

brak

int

int

long int

unsigned int

long long int

long int

unsigned long int

long long int

unsigned long long int

u

lub U

unsigned int

unsigned int

unsigned long int

unsigned long int

unsigned long long int

unsigned long long int

l

lub L

long int

long int

long long int

unsigned long int

long long int

unsigned long long int

u

lub U

unsigned long int

unsigned long int

oraz l lub L

unsigned long long int

unsigned long long int

ll

lub LL

long long int

long long int

unsigned long long int

u

lub U oraz ll lub LL

unsigned long long int

unsigned long long int

Wykład 4

Kurs C z elementami C++

background image

Elementy definicji j ˛ezyka

Operacje bitowe j ˛ezyka C

Typy stałych

Typy stałych całkowitych

Typy stałych zmiennopozycyjnych

Typy stałych zmiennopozycyjnych

Stała zmiennopozycyjna musi zawiera´c cz ˛e´s´c ułamkow ˛

a (z

kropk ˛

a dziesi ˛etn ˛

a) lub wykładnik (zaczynaj ˛

acy si ˛e od E lub

e

.

Stała zmiennopozycyjna mo˙ze si ˛e ko ´nczy´c jednym ze
znaków f F l L. Je´sli si ˛e nie ko ´nczy ˙zadnym z tych
znaków, to jest typu double.

Stała zmiennopozycyjna ko ´ncz ˛

aca si ˛e jednym ze znaków

f F

jest typu float.

Stała zmiennopozycyjna ko ´ncz ˛

aca si ˛e jednym ze znaków

l L

jest typu long double.

Wykład 4

Kurs C z elementami C++


Document Outline


Wyszukiwarka

Podobne podstrony:
el0809 wyk04
E Mat1 wyk04 ukl r n id 148795 Nieznany
WYK04
PO wyk04 v1
E wyk04
BD Wyk04 TK
el0809 wyk04
wyk04 doc
WYK04
wyk04

więcej podobnych podstron