首页 > 解决方案 > 旋转字节 N 位

问题描述

我正在旋转整数的字节。
我尝试做的第一件事是获取较低的 N 位数和较高的 n 位数。因为在我调用 shift(n) 之后,它会在高端或低端切断这些位,具体取决于它是向左还是向右旋转。
到目前为止,我的工作量很低,它抓住了正确的位。我的高位没有抓住我试图使用 k 和 m 来抓住我的高位的正确位。
在我打电话给我的班次后,我需要将被切断的位重新添加到我从中抓取它的另一侧。
我正在努力获取如何添加这些位以及如何获取高 n 位的逻辑。提示和建议将不胜感激。

NBITS-> 字节中的位数
Shift(n)-> 根据 n 是正数还是负数,将 n 位数向左或向右移动

void shift(int n)         // If n > 0, shifts bits right n places; if n < 0,left
{   
    if (n > 0)
        bits = bits >> n;
    else if (n < 0)
        bits = bits << -n;
}

void rotate(int n)
{   
    int k = NBITS - 1; // last position
    int m = (NBITS - 1) - n + 1; // to desired position
    int low = bits & ((1 << n) - 1);
    int high = (bits & (((1 << (m - k + 1)) - 1) << k)) >> k;
   
    assert(abs(n) <= NBITS);
    if (n > 0) { // rotate right n places 
        shift(n);
        //put back cut off bits
    }
    else if (n < 0) { // rotates left
        shift(n);
        //put back cut off bits
    }
}

标签: c++bit-manipulation

解决方案


推荐阅读