Aivot rullaa tyhjää tällä hetkellä eli kysytäämpä täältä.
Haluan tarkastaa yhden bitin tilan 32-bittisestä rekisteristä. Onnistuuko jotenkin järkevämmin kuin shiftaamalla muut bitit ympäriltä pois ja katsomalla maskaamalla onko bitti 1 vai 0?
En äkkiseltään itse keksi parempaa tapaa mutta tapa on ah-niin-työläs =D.
AND-operaatiolla tulokseksi tulee 0 tai bitin arvo (1, 2, 4, 8, 16 jne.), esimerkiksi 0x1234 & 0x0020 tuottaa luvun 0x0020. Jos et ennalta tiedä, mikä bitti pitää tarkistaa, voit siirtää ykkösen oikeaan kohti: 0x1234 & (1 << n).
Niin, riippuu tietty myös kielestä ja esim. assemblyn tapauksessa prossusta. Joissakin prosessoreissa on suoraan konekäsky bitin tilan tarkistamiseen. Jos kyse on C:stä tai korkeamman tason kielistä, niin sitten yleensä tuolla Metabolixin mainitsemalla tavalla.
Kyse on C:stä ja todellakin haluan tarkastaa yhden tietyn bitin tilan (0 vai 1). Tosiaan loogisella ANDillahan sieltä jymähtää joko 0 tai bitin arvo vastaukseksi. Ainoa mitä en aamulla keksinyt oli ANData ensimmäisen maskauksen tulos vielä toisella toisella maskilla, sillä bitin tila määrää if-ehdon toteutumisen.
Mutta tosiaan tarkemmin ajateltuna sillä ei ole merkitystä onko if-ehdon tulos 1 vai jotain suurempaa kuhan ei ole 0. Aamutuimaan näiden asioiden tajuaminen tuppaa olemaan aina vaan vaikeempaa. Kiitos vastauksista.
Jos tarkastat yhden bitin kerrallaan, riittää, että and ei palauta nollaa. Jos tarkastat, että useampi bitti on kerralla voimassa, pitää tarkastaa andin tuloskin tarkemmin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.