我有两个 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 < y0AND x1 < y1AND AND 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;
}
我知道有很多按位体操。有更快的解决方案吗?