1. 程式人生 > 其它 >將數值n中向左移m位,移動的m位重新出現在右端填補--左旋轉移位

將數值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的對應位置 }
//可以直接得出新值。