C++ 从整数中检索最后6位

C++ 从整数中检索最后6位,c++,visual-c++,C++,Visual C++,我需要获取整数或Uint32的最后6位。例如,如果我有一个值183,我需要最后六位,这将是110111ie55 我已经写了一小段代码,但它的行为并不像预期的那样。你们能指出我犯了什么错误吗 int compress8bitTolessBit( int value_to_compress, int no_of_bits_to_compress ) { int ret = 0; while(no_of_bits_to_compress--) { std::co

我需要获取整数或Uint32的最后6位。例如,如果我有一个值183,我需要最后六位,这将是
110111
ie
55

我已经写了一小段代码,但它的行为并不像预期的那样。你们能指出我犯了什么错误吗

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;
}
int-compress8bitTolessBit(int-value\u-to\u-compress,int-no\u-of\u-bits\u-to\u-compress)
{
int-ret=0;
while(没有\u位\u到\u压缩--)
{
std::couttl;dr:


我不明白这个问题,你不能只用位运算符吗

u32 trimmed = value & 0x3F;

<>这将使用操作符保持6个最低有效位。<代码> int值=输入(1)p>您已经进入二进制算术领域。C++具有这种操作的内置运算符。“获得某些位”的行为是用“和”二进制运算符来完成的。< /P>
    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);

int n=原始值&(1整数A的最后k位

1. A % (1<<k); // simply A % 2^k
2. A - ((A>>k)<<k); 

1.A%(1k)我没有投反对票,但我反对txt术语(或者是leet speek?)我没有投反对票,但仅仅粘贴一行代码对OP并没有真正的帮助。有了一些解释会更好。如果OP知道
操作符&
做了什么,他就不需要问这个问题了。+1编写解决问题的简单代码可以引导读者探索和学习更多内容。并不总是需要填鸭式回答公平地说,这个问题本身很糟糕(至少它太本地化了)因此,在这个问题上,制造这样一种解决问题的资源的精神的确是有点迷失了,所以所有的赌注都是在网站政策的作用下进行的。除了不必要的复杂代码之外,你认为“代码> Re>>=1 <代码>将如何实现。而且,你可能想考虑如果通过的数字是否定的,将会发生什么。谢谢EVE。ryone,谢谢你的帮助。
int n = original_value & ((1 << N) - 1);
1. A % (1<<k); // simply A % 2^k
2. A - ((A>>k)<<k);