将数值n中向左移m位,移动的m位重新出现在右端填补--左旋转移位
大体上可以通过两种方式。
1.通过字符串的方式
2.位运算的方式
//字符串的方式
void move(const char*ps, char * ps1,int n)
{
strcpy(ps1, &ps[n]); //将指定字符串拷贝至ps1
if (n == 0) //如果移动0位
strcpy(ps1,ps);
strncat(ps1,ps,n); //再将n个字符拷贝至ps1的字符串末端
}
//或者也可以通过两个循环,分两次将一个字符串赋值给另一个字符串数组
//缺点在于,如果需要计算对应的十进制,需要再次转换。
//位运算,出自课本习题的答案:15章,第5题 int new_val(int n, int m) { static const int size = CHAR_BIT * sizeof(unsigned int); unsigned int temp; m %= size; temp = n >> (size - m); //反向位移,向右移动(size-m)个位,这样就得出将要移动的位的情况 return (n << m) | temp; //原先左移,是用0填补,现在用填补的0与temp进行或运算,如果temp的相应位置为1,则打开n的对应位置 }
//可以直接得出新值。
浙公网安备 33010602011771号