So for example if
x = unsigned int 1 = binary 00000000000000000000000000000001
The function
unsigned int rightrot (x, 29)
will right shift the bits 29 times, and making sure that the bits wrap around.
Here is the code I came up with. Can you think of clever ways to improve the code it?
#include <stdio.h> unsigned int rightrot(unsigned int data, unsigned int rotCount) { unsigned int ctr = 0; for(ctr=0;ctr<rotCount;ctr++) { unsigned int lsb = data & 1; data >>= 1; if (lsb) data |= (lsb << sizeof(unsigned int)*8-1); } return (data); } unsigned int main() { unsigned int d = 1; unsigned int shift = 31; printf("%d right shifted and rotated %d times is %d\n",d,shift,rightrot(d,shift)); }
No comments:
Post a Comment