Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Bitin tilan tarkistus

pussuw [16.07.2009 10:58:27]

#

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.

Metabolix [16.07.2009 11:00:37]

#

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).

Grez [16.07.2009 11:04:04]

#

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.

pussuw [16.07.2009 14:59:07]

#

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.

tkarkkainen [16.07.2009 18:15:44]

#

Jos tarkastat yhden bitin kerrallaan, riittää, että and ei palauta nollaa. Jos tarkastat, että useampi bitti on kerralla voimassa, pitää tarkastaa andin tuloskin tarkemmin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta