JYVSKYLN YLIOPISTO Yhden bitin asettaminen Javalla JYVSKYLN YLIOPISTO
JYVÄSKYLÄN YLIOPISTO Yhden bitin asettaminen Javalla
JYVÄSKYLÄN YLIOPISTO 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[] = {0 x 01, 0 x 02, 0 x 04, 0 x 08, 0 x 10, 0 x 20, 0 x 40, 0 x 80}; /* nyt taulukon indeksiä vastaavalla maskilla saadaan maskattua indeksiä vastaava bitti tavusta (oikealta lukien) eli esim. maski[2] = 0 x 04 (on binäärinä 00000100) */ int bit = x; // 0 or 1, so in binary 0000000 x 2
JYVÄSKYLÄN YLIOPISTO Bitin asettaminen arvoon x g g g g g int maski[] = {0 x 01, 0 x 02, 0 x 04, 0 x 08, 0 x 10, 0 x 20, 0 x 40, 0 x 80}; 000000010 000001000 000100000 010000000
JYVÄSKYLÄN YLIOPISTO 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); g Eli alkuperäinen arvosta ja maskin negaatiosta otetaan AND operaatio – Tällä alkuperäinen arvo asetetaan nollaksi g Saadusta tuloksesta sekä asetettavasta bitistä otetaan OR operaatio – Bitti siirretään ensin maskin osoittamaan paikkaan • (bit << 2) – Ja siis, maski[2] = 0 x 04 = 00000100 (positio 2 oikealta päin) 4
JYVÄSKYLÄN YLIOPISTO Bitin asettaminen arvoon x Eli maskin negaatio: ~maski[2] = 11111011 And operaatio: // rekisteri // & ~maski[2] // AND 011011111011 01101011 5
JYVÄSKYLÄN YLIOPISTO g Bitin asettaminen arvoon x Bitin siirto maskin osoittamaan paikkaan – (bit << 2) eli – 0000000 x ----> 00000 x 00 g Joten // (rekisteri & ~maski[2]) // | (bit << 2) // A B | 0 0 1 1 1 0 1 1 OR 01101011 00000 x 00 01101 x 11 6
JYVÄSKYLÄN YLIOPISTO g Javan OR operaatiot Aikaisemmin meillä on ollut aina 0 toisena tekijänä, jolloin ei ole väliä kumpaa käyttää OR g XOR A B | A B ^ 0 0 0 0 1 1 1 1 1 1 0 7
- Slides: 7