nha*_*123 3 c++ bit-manipulation
如何在8x8区域中移动列?例如,我有一个64位无符号整数,如下所示:
#include <boost/cstdint.hpp>
int main()
{
/** In binary:
*
* 10000000
* 10000000
* 10000000
* 10000000
* 00000010
* 00000010
* 00000010
* 00000010
*/
boost::uint64_t b = 0x8080808002020202;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想将第一个垂直行转换为四次,之后它变为:
/** In binary:
*
* 00000000
* 00000000
* 00000000
* 00000000
* 10000010
* 10000010
* 10000010
* 10000010
*/
b == 0x82828282;
Run Code Online (Sandbox Code Playgroud)
这只能通过逐位运算符相对快速地完成,还是什么?
我最好的猜测是:
(((b & 0x8080808080808080) >> 4 * 8) | (b & ~0x8080808080808080)
Run Code Online (Sandbox Code Playgroud)
我们的想法是隔离列位并仅移位它们.