ventle Skrevet 3. april 2009 Del Skrevet 3. april 2009 Jeg har ett 4-bits ord som jeg skal gjøre om til 8-bits etter følgende mønster: 0000 skal gi 0000000 1010 skal gi 11001100 0110 skal gi 00111100 1111 skal gi 11111111 osv. Operasjonen finner sted på en mikrokontroller med begrenset prosesseringskraft, jeg lurer derfor på om noen vet av en smartere måte som krever mindre regnearbeid enn å maskere en og en bit, skifte denne ett visst antall ganger mot venstre og deretter and-e disse sammen til ett ord, for eksempel: //første bit bit = ord4 & 0x08; ord8 |= bit<<4; ord8 |= bit<<3; //andre bit bit = ord4 & 0x04; ord8 |= bit<<4; ord8 |= bit<<3; //osv... jeg skjønner jo at denne koden kan skrives enklere ved bruk av for- og while-sløyfe, men det vil i maskinkode sannsynligvis ta minst like mange klokkesykluser å gjennomføre. Jeg lurer på om det finnes noen triks for å gjøre dette med minimal maskinkode. Anyone? Lenke til kommentar
JeffK Skrevet 3. april 2009 Del Skrevet 3. april 2009 (endret) siden 00000011 = 0x03 00001100 = 0x0C 00110000 = 0x30 11000000 = 0xC0 y = (x & 1)?0x03:0 + (x & 2)?0x0C:0 + (x & 4)?0x30:0 + (x & 8)?0xC0:0; Endret 3. april 2009 av JeffK Lenke til kommentar
LostOblivion Skrevet 3. april 2009 Del Skrevet 3. april 2009 Kompiler med -O3 hvis du bruker GCC. Lenke til kommentar
ventle Skrevet 4. april 2009 Forfatter Del Skrevet 4. april 2009 Genialt, Jeff måtte bare legge til en parantes rundt hvert av de fire uttrykkene, så fungerte det perfekt Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå