C语言里有移位操作,但没有循环移位操作。
举例,对一位数为8的数a,进行循环左移与右移的操作如下:
unsigned char a,b;
a = 0x0f;
b = a>>(8-3); /* 补偿左移丢失的位 */
a = a<<3;
a = a | b; /* 循环左移3位 */
即循环左移3位操作为:a = (a<<3) | (a>>(8-3));
右移3位为:a = (a>>3) | (a<<(8-3));
故对一位数为N的数a进行循环移位i(i<=N) 为:
循环左移 a = (a>>i) | (a<<(N-i));
循环右移 a = (a<<i) | (a>>(N-i));