我有两个 64 位整数 x
和 y
.每一位代表5个无符号短整数:前10位代表第一个整数,接下来的13位代表第二个整数,接下来的16位代表第三个整数,接下来的14位代表第四个整数,其余位代表第 5 个整数。
让x0
, x1
, x2
, x3
, x4
是构成x
的5个短整数.让y0
, y1
, y2
, y3
, y4
是构成y
的5个短整数.我需要知道 x0 < y0
和 x1 < y1
和 x2 < y2
和 x3 < y3
和 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;
}
我知道有很多按位体操。任何更快的解决方案?
最佳答案
这并没有真正回答提出的问题,但解决了一个非常相似的问题:(如果有人能够重新组织实际问题,这可能会有所帮助,比如 OP)
如果整数没有紧密排列(即如果每个“字段”之间和 MSB 末尾有单个零位填充),并且您想知道 <=
而不是 <
,我认为您可以只减去数字并检查是否有任何填充位发生变化。 (即 (y - x) & PADDING_MASK
)
关于c++ - 按段比较 64 位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50663315/