14. januar 2006 - 16:37Der er
3 kommentarer og 1 løsning
funktion til right shift af de 4 LSB uden at påvirke resten.
Davs.
Jeg skal bruge en funktion, som kan shifte Right/left på bit 0 - 3 uden af resten af bitsne påvirkes. Jeg skal også bruge den til 4-7 bit, men det regnede jeg med selv at rette til.
Jeg har rodet lidt med det, men kan ikke få det til at virke.
Det er til en microprocessor, som skal styre 2 stepmotore.
Her er lidt pseudo kode til at illustrere virkemåden.
Det SKAL være i C da min compiler ikke er vild med c++ main() { funktion(true) } void funktion(bool retning) { if (retning) shift 1 right; else if (!retning) shift 1 left; }
Noget i retning af: char shiftLow(char val, int direction) { char s = 0; if ( direction < 0 ) { direction = direction * -1; s = ((val & 0x0F) >> direction) & 0x0F; } else { s = ((val & 0x0F) << direction) & 0x0F; } return s | (val & 0xF0); }
if sætningen der skelner mellem left eller right shift er nødvendig, idet shift af et negativt antal bits giver et udefineret resultat - men alt afhængig af hvilken compiler du bruger, er det muligt det virker uden alligevel. Hvis koden skal være portabel, vil jeg dog anbefale versionen herover.
Fra MS' side som shift operator i C/C++: "The results are undefined if the right operand of a shift expression is negative or if the right operand is greater than or equal to the number of bits in the (promoted) left operand."
Det er fint - Med lidt rettelser virker det i mit system.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.