我需要获取整数或Uint32的最后6位.例如,如果我的值为183,那么我需要最后六位,110 111即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;
}
Run Code Online (Sandbox Code Playgroud)
ten*_*our 11
您已进入二进制算术领域.C++有这种东西的内置运算符.使用"AND"二元运算符完成整数"获取某些位"的操作.
0101 0101
AND 0000 1111
---------
0000 0101
Run Code Online (Sandbox Code Playgroud)
在C++中,这是:
int n = 0x55 & 0xF;
// n = 0x5
Run Code Online (Sandbox Code Playgroud)
所以要获得最右边的6位,
int n = original_value & 0x3F;
Run Code Online (Sandbox Code Playgroud)
并获得最右边的N位,
int n = original_value & ((1 << N) - 1);
Run Code Online (Sandbox Code Playgroud)
以下是有关的更多信息
我没有遇到问题,你不能只使用按位运算符吗?例如
u32 trimmed = value & 0x3F;
Run Code Online (Sandbox Code Playgroud)
这将通过使用按位AND运算符仅保留6个最低有效位.