1 / 18

Bittioperaatiot Javalla

Bittioperaatiot Javalla. Yhden bitin asettaminen Siirtorekisterin toteutus. Bitin asettaminen arvoon x. Olkoon meillä int rekisteri = 111; // 01101111 can also be byte or short, as we use only the 8 lowest bits. int maski[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

elisha
Download Presentation

Bittioperaatiot Javalla

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bittioperaatiot Javalla Yhden bitin asettaminen Siirtorekisterin toteutus

  2. Bitin asettaminen arvoon x Olkoon meillä int rekisteri = 111; // 01101111 can also be byte or short, as we use only the 8 lowest bits. int maski[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; /* nyt taulukon indeksiä vastaavalla maskilla saadaan maskattua indeksiä vastaava bitti tavusta (oikealta lukien) eli esim. maski[2] = 0x04 (on binäärinä 00000100) */ int bit = x; // 0 or 1, so in binary 0000000x

  3. Bitin asettaminen arvoon x • int maski[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; • 00000001 • 00000010 • 00000100 • 00001000 • 00010000 • 00100000 • 01000000 • 10000000

  4. Bitin asettaminen arvoon x Operaatio jolla bitti 1 voidaan asettaa arvoon 0 (koska sitä ei voi tehdä suoraan OR operaatiolla) : rekisteri = (rekisteri & ~maski[2]) | (bit << 2); • Eli alkuperäinen arvosta ja maskin negaatiosta otetaan AND operaatio • Tällä alkuperäinen arvo asetetaan nollaksi • Saadusta tuloksesta sekä asetettavasta bitistä otetaan OR operaatio • Bitti siirretään ensin maskin osoittamaan paikkaan • (bit << 2) • Ja siis, maski[2] = 0x04 = 00000100 (positio 2 oikealta päin)

  5. Bitin asettaminen arvoon x Eli maskin negaatio: ~maski[2] = 11111011 And operaatio: // rekisteri 01101111 // & ~maski[2] AND 11111011 // 01101011

  6. Bitin asettaminen arvoon x • Bitin siirto maskin osoittamaan paikkaan • (bit << 2) eli • 0000000x ----> 00000x00 • Joten // (rekisteri & ~maski[2]) 01101011 // | (bit << 2) OR 00000x00 // 01101x11

  7. Javan OR operaatiot • Aikaisemmin meillä on ollut aina 0 toisena tekijänä, jolloin ei ole väliä kumpaa käyttää • OR XOR

  8. Siirtorekisteri (CRC-8) 7 6 5 4 3 2 1 0 Positio 0 0 0 0 0 0 0 0 • Nyt siirtorekisteriin tuodaan bittejä oikealta • Esimerkiksi Position 2 uusi arvo on position 7 ja position 1 XOR operaation tulos • Eli kun bittejä siirretään niin XOR operaatio edellisen kierroksen arvoista • Javalla seuraavasti ((rekisteri & 0x80) >>> 7) ^ ((rekisteri & 0x02) >>> 1);

  9. Siirtorekisteri (CRC-8) 7 6 5 4 3 2 1 0 Positio 0 0 0 0 0 0 0 0 Positio 0: Byte uusi[pituus]; // uusi[0] = 00001111; int maski[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; for (int i=0;i<pituus;i++) { // go through all bytes for (int j=7;j>=0;j--) { // move each bit of byte to register MSB first { // lisää muut positiot ja muu rekisterin käsittely ((rekisteri & 0x80) >>> 7) ^ ((uusi[i] & maski[j]) >>> j); } }

  10. CRC koodauksen toteutus siirtorekisterillä • Esimerkiksi CRC-8 koodaus • http://www.macs.hw.ac.uk/~pjbk/nets/crc/ 7 6 5 4 3 2 1 0 Positio 0 0 0 0 0 0 0 0

  11. Siirtorekisteri (CRC-8) 7 6 5 4 3 2 1 0 Positio A C D B E F G H • Maskataan rekisteristä position 7 bitti ja siirretään • (rekisteri & 0x80) >>> 7 • Olkoon rekisterissä esim. seuraavat bitit (A - H joko 0 tai 1)

  12. Siirtorekisteri (CRC-8) 7 6 5 4 3 2 1 0 Positio A C D B E F G H • Maskataan rekisteristä position 1 bitti ja siirretään • (rekisteri & 0x02) >>> 1 • Rekisterissä samat bitit kuin edellä (A - H joko 0 tai 1)

  13. Siirtorekisteri (CRC-8) 7 6 5 4 3 2 1 0 Positio A C D B E F G H • XOR operaatio rekisterin positioiden 7 ja 1 bitit välillä • ((rekisteri & 0x80) >>> 7) ^ ((rekisteri & 0x02) >>> 1);

  14. Siirtorekisteri (CRC-8) 7 6 5 4 3 2 1 0 Positio IJKL… A C D B E F G H • Tehdään kaikki XOR operaatiot • Tulokset olkoon X, Y ja Z vasemmalta oikealle • Siirretään XOR operaation tulokset oikeaan positioon • Eli positiot 2, 1 ja 0

  15. Siirtorekisteri (CRC-8) 7 6 5 4 3 2 1 0 Positio JKL… A B D E C F G H I • Siirretään kaikkia bittejä vasemmalle • rekisteri = (rekisteri << 1);

  16. Siirtorekisteri (CRC-8) 7 6 5 4 3 2 1 0 Positio JKL… A B D E C F G H I • Asetetaan XOR laskujen tulokset oikeille paikoille • rekisteri = (rekisteri & ~0x04) | (X << 2); • Voisi olla myös ^ operaatio, koska ensin nollataan edellinen arvo

  17. Siirtorekisteri (CRC-8) 7 6 5 4 3 2 1 0 Positio JKL… A B D E C F G H I • rekisteri = (rekisteri & ~0x04) | (X << 2);

  18. Siirtorekisteri (CRC-8) 7 6 5 4 3 2 1 0 Positio JKL… A B D E C F X Y Z • Vastaavasti muille XOR operaation tuloksille Y ja Z • Ja sitten aloitetaan alusta…

More Related