按段比较 64 位整数

use*_*927 5 c++ bit-manipulation swar

我有两个 64 位整数xy. 每个代表5个无符号短整数:前10位代表第一个整数,接下来的13位代表第二个整数,接下来的16位代表第三个整数,接下来的14位代表第四个整数,其余位代表第 5 个整数。

x0x1x2x3x4是构成5个短整型x。设y0y1y2y3y4是构成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)

我知道有很多位体操。任何更快的解决方案?

Ale*_*amo 2

这并没有真正回答所提出的问题,而是解决了一个非常相似的问题:(如果有人能够重新组织实际问题,例如OP,这可能会有所帮助)

如果整数不是紧密包装的(即,如果每个“字段”之间以及 MSB 端有一个零位填充),并且您想知道而<=不是<,我认为您可能可以只减去数字并检查是否有任何填充位发生变化。(IE。(y - x) & PADDING_MASK