use*_*927 5 c++ bit-manipulation swar
我有两个 64 位整数x和y. 每个代表5个无符号短整数:前10位代表第一个整数,接下来的13位代表第二个整数,接下来的16位代表第三个整数,接下来的14位代表第四个整数,其余位代表第 5 个整数。
设x0,x1,x2,x3,x4是构成5个短整型x。设y0,y1,y2,y3,y4是构成5个短整型y。我需要知道是否x0 < y0AND x1 < y1AND x2 < y2AND x3 < y3AND x4 < y4。
我认为最简单的解决方案是转移:
bool allLess(std::size_t x, std::size_t y)
{
if(x >= y) return 0;
int shift[] = {10, 13, 16, 14};
for(int i = 0; i < 4; ++i)
{
x <<= shift[i];
y <<= shift[i];
if(x >= y) return 0;
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我知道有很多位体操。任何更快的解决方案?
这并没有真正回答所提出的问题,而是解决了一个非常相似的问题:(如果有人能够重新组织实际问题,例如OP,这可能会有所帮助)
如果整数不是紧密包装的(即,如果每个“字段”之间以及 MSB 端有一个零位填充),并且您想知道而<=不是<,我认为您可能可以只减去数字并检查是否有任何填充位发生变化。(IE。(y - x) & PADDING_MASK)