Gå til innhold

Lese av en og en bit i c?


Anbefalte innlegg

Jeg er nybegynner i c programmering og holder på med en oppgave. Oppgaven går ut på finne log2 til en "unsigned integer n" ved å bruke denne fremgangsmåten: "Find the most significant set bit in n and return the position of this bit. For example, if n is 17 (10001), the function should return 4.

 

Jeg tenker at for å løse denne oppgaven må jeg få lest av "bit'ene" en etter en fra venstre. Vet ikke om dette er riktig fremgangsmåte, men finnes det en måte å lese av ett og ett tall på?

 

:hmm: Håper noen forstår spørsmålet mitt...

Lenke til kommentar
Videoannonse
Annonse

For mest effektivitet, loop ikke igjennom. Du vet at det er en 32 unsigned integer, og da er det bedre å programmere linje for linje. Det ser ut som om funksjonen skal runde nedover fordi 4^2 != 17. Det du gjør da er å sjekke om tallet n er større enn 1 << x*2. << er left shift og x*2 er først 1. Her er koden for å regne log2 av en unsigned integer.

//Returner -1 hvis n er null.
int log2(unsigned int n)
{
int pos = 0;
if(n == 0)
	return -1;

if(n >= 0x10000)// n >= 1 << 16
{
	n >>= 16;// Flytt den største bit av n
	pos += 16;
}
if(n >= 0x100)// n >= 1 << 8
{
	n >>= 8;// Flytt den største biten av n
	pos += 8;
}
if(n >= 0x10)// n >= 1 << 4
{
	n >>= 4;// Flytt den største bit av n
	pos += 4;
}
if(n >= 0x4)// n >= 1 << 2
{
	n >>= 2;// Flytt den største bit av n
	pos += 2;
}
if(n >= 0x2)// n >= 1 << 1
{
	//n >>= 1; Trenger ikke å shifte den mer. 
	pos += 1;
}

       return pos;
}

Endret av Tapped
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...