我有两个 64 位整数x
和y
. 它们每个代表5个短无符号整数:前10位代表第一个整数,接下来的13位代表第二个整数,接下来的16位代表第三个整数,接下来的14位代表第4个整数,其余位代表第 5 个整数。
让x0
, x1
, x2
, x3
,x4
是构成 的 5 个短整数x
。让y0
, y1
, y2
, y3
,y4
是构成 的 5 个短整数y
。我需要知道x0 < y0
AND x1 < y1
AND AND x2 < y2
AND x3 < y3
AND 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;
}
我知道有很多按位体操。有更快的解决方案吗?