Re: Rotating through a four-bit nibble
"Tim Gould" <t.gould (AT@) lancaster (DOT.) ac (DOT.) [email protected]>
| Newsgroups | gmane.comp.hardware.lego.robotics |
|---|---|
| Organization | None |
| Message-ID | <[email protected]> |
In lugnet.robotics, Brian Davis wrote: > No, it's not pornographic (look over in rtlToronto - I hear it's a fun > thread). But I'm working in NQC, and I need to rotate the bit series in a 4-bit > (or 8-bit) nibble embedded in a 16-bit word. Annoying. Any suggestions? Masking > the desired four bits out of a storage variable and into a temporary variable > four times (so it's a repeating pattern) and then rotating and masking out the > desired sequence might work, but is there a better way? Bit-level manipulation > is not my strong suite. > > (x's here are "something else" that I may wish to keep intact, y is garbage or > potentially trashed bits) > > stored sequence in 16-bit word: xxxx xxxx 0110 xxxx > 4-bit nibble copied across temporary: xxxx 0110 0110 0110 > left shift temporary, say, twice: xx01 1001 1001 10yy > mask out one nibble back into storage: xxxx xxxx 1001 xxxx > > There's got to be a better way. I'm using NQC, so I'm stuck with those big > 16-bit words and basic operations like bit logic, shifts, and interger division > (and of course modulo division). > > Anybody? One way to do this might be by using multiplication and division. Temp = (Input & 0000 0000 0011 0000)*4 + (Input & 0000 0000 1100 0000)/4 Output = (Input & 1111 1111 0000 1111) & (Temp & 0000 0000 1111 0000) Although I imagine that can be condensed to one line with a bit of thought. Tim