Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Copyright  Hannu Laine Bittitason-operaatiot Hannu Laine.

Samankaltaiset esitykset


Esitys aiheesta: "Copyright  Hannu Laine Bittitason-operaatiot Hannu Laine."— Esityksen transkriptio:

1 Copyright  Hannu Laine Bittitason-operaatiot Hannu Laine

2 HL1 Vanhastaan tuttua: Looginen tieto ilmaistaan int tyypillä. Loogisen tiedon operaatioita ovat AND (&&), OR (||) ja NOT (!). Pienin muistista prosessoriin siirrettävä yksikkö on tavu. Kuitenkin on tarvetta usein päästä käsiksi yhteen bittiin. Silloin bitin sisältävä tavu siirretään prosessorin rekisteriin, tehdään operaatiot siten, että ne vaikuttavat vain kyseiseen bittiin ja siirretään tavu takaisin muistiin. Bittitason operaatiot 1 Tällaisia yhteen bittiin kohdistuvia operaatioita ovat Bittiposition testaus (Onko tilassa 0 vai 1?). Bittiposition asetus (tilaan ON eli 1). Bittiposition nollaus (tilaan OFF eli 0). Bittiposition tilan vaihto (bitin ”kääntö”). Lisäksi voidaan tarvita useamman bitin muodostaman bittikentän käsittelyä Bittikentän arvon selvittäminen Arvon asetus bittikenttään

3 HL2 Bittitason operaattorit ja vertailu loogisiin: OperaatioLooginen oper.Bittitason oper. AND&&& OR||| XOR(ei ole)^ NOT!~ (komplementti) Huom. Molemmat määritelty kokonaisluvuille. Bittitason operaatiot 2 Operaattorien toiminta käytännössä unsigned int a = 0xA300; //1010 0011 0000 0000 unsigned int b = 0x5300; //0101 0011 0000 0000 unsigned int c; c = a && b;// c  1 Miksi? c = a & b;// c  0x0300 c = a || b;// c  1 Miksi? c = a | b;// c  0xF300 c = a ^ b; // c  0xF000 c = !a;// c  0 Miksi? c = ~a;// c  0x5CFF

4 HL3 Esimerkkinä käytetään yksinkertaisessa tekstimuodossa olevan PC:n näytön näyttömuistin attribuuttitavua, jonka muoto on Bittioperaatioiden hyödyntäminen 1 Taustaväri Kirkkaus Merkkiväri Vilkutus R G B Bittiposition testaus Esim. Onko vilkutus päällä? #define BLINK 0x80 if ( attr & BLINK) printf(”\nVilkutus on päällä”) else printf(”\nVilkutus ei ole päällä”) Oletetaan, että muuttujassa attr on näytön tietyn merkkipaikan attribuutti. Muuttuja attr on määritelty seuraavasti: unsigned char attr;

5 HL4 Bittioperaatioiden hyödyntäminen 2 Bittiposition asetus (tilaan ON eli 1) Esim. Aseta merkin kirkkaus päälle. #define INTENSITY 0x08... attr = attr | INTENSITY;... Bittiposition nollaus (tilaan OFF eli 0) Esim. Poista merkin kirkkaus. #define INTENSITY 0x08... attr = attr & ~INTENSITY;... Bittiposition tilan vaihto (bitin ”kääntö”) Esim. Vaihda kirkkausbitin tila? #define INTENSITY 0x08... attr = attr ^ INTENSITY;... Kaikissa näissä on valittava: 1) maski 2) operaatio.

6 HL5 Bittioperaatioiden hyödyntäminen 3 Tarkistettavat asiat: Muutettava bittipositio muuttuu toivotuksi 1) Muuttuu toivotuksi, jos alkutilanne 0 2) Muuttuu toivotuksi, jos alkutilanne 1 Muualla kaikki säilyy 3) 0 säilyy 4) 1 säilyy Lisäksi voidaan tarvita useammasta bitistä muodostuvan bittikentän käsittelyä. Näin on esimerkiksi tehtävissä: 1) Mikä on taustan väri (värinumerona)? tai 2) Aseta taustan väriksi ruskea (värinumero 6)! Silloin tarvitaan siirto-operaatioita. xxxx xxxx käsiteltävä sana ssss ssms ssss ssss maski xxxx xxtx xxxx xxxx tulos säilyy haluttu tulos s ”säilyttää” m modifioi t on tulos

7 HL6 Siirto-operaatiot Siirto vasemmalle >. Onko int-tyyppisen tiedon siirto oikealle aritmeettinen vai looginen? Ei määritelty standardissa. => Kannattaa käyttää vain unsigned tiedolle tai maskata sisään tulevat bitit. Seuraavissa bcolor on määritelty seuraavasti: unsigned char bcolor tai unsigned int bcolor. Bittikentän arvon selvittäminen Esim. Mikä on taustaväri... bcolor = ( attr >> 4) & 0x07; Arvon asetus bittikenttään Esim. Aseta tautaväriksi ruskea #define BACKGCOLOR 0x70 #define FOREGCOLOR 0x07... bcolor = 6; //esimerkiksi ruskea attr = (attr & ~BACKGCOLOR) | (bcolor << 4) vanhat poisuudet tilalle

8 HL7 OperaattoriAssosiatiivisuus () [] ->.Left to right ! ~ + - ++ -- & * (type)Right to left (unaarinen) * / %Right to left + - Left to right > Left to right >= Left to right == != Left to right & Left to right (bit-wise and) ^ Left to right (bit-wise xor) | Left to right (bit-wise or) && Left to right (logical and) || Left to right (logical or) ? : (condition) Right to left = *= /= %= += -= &= ^= |= >= Right to left,Left to right Operaattorien vahvuudet


Lataa ppt "Copyright  Hannu Laine Bittitason-operaatiot Hannu Laine."

Samankaltaiset esitykset


Iklan oleh Google