У меня есть два 64-битных целых числа x
и y
.Каждое из них представляет 5 коротких целых без знака: первые 10 бит представляют первое целое число, следующие 13 бит представляют второе целое число, следующие 16 бит представляют третье целое число, следующие 14 бит представляют четвертое целое число, а остальные биты представляют5-е целое число.
Пусть x0
, x1
, x2
, x3
, x4
- 5 коротких целых чисел, составляющих x
.Пусть y0
, y1
, y2
, y3
, y4
будут 5 короткими целыми числами, составляющими y
.Мне нужно знать, если 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;
}
Iзнаю, что есть много побитовой гимнастики.Есть более быстрое решение?
Спасибо!