我需要获取整数或Uint32的最后6位。例如,如果我的值为183,则需要后六位,即110 11155

我已经写了一小段代码,但是表现不如预期。你们能指出我在哪里出错吗?

int compress8bitTolessBit( int value_to_compress, int no_of_bits_to_compress )
{
    int ret = 0;
    while(no_of_bits_to_compress--)
    {
        std::cout << " the value of bits "<< no_of_bits_to_compress << std::endl;
        ret >>= 1;
        ret |= ( value_to_compress%2 );
        value_to_compress /= 2;
    }
    return ret;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int val = compress8bitTolessBit( 183, 5 );

    std::cout <<" the value is "<< val << std::endl;
      system("pause>nul");
    return 0;
}

最佳答案

您已经进入了二进制算术领域。 C++具有内置的用于此类操作的运算符。使用“AND”二进制运算符完成整数的“获取某些位”操作。

    0101 0101
AND 0000 1111
    ---------
    0000 0101

在C++中,这是:
int n = 0x55 & 0xF;
// n = 0x5

因此,要获得最右边的6位,
int n = original_value & 0x3F;

为了得到最右边的N位,
int n = original_value & ((1 << N) - 1);

这是有关的更多信息
  • Binary arithmetic operators in C++
  • Binary operators in general
  • 09-07 00:59