Как вычислить ближайшее большее целое число, делимое на 8 в побитовой операции C ++? - PullRequest
1 голос
/ 06 марта 2020

Мне нужно вычислить ближайшее большее целое число, делимое на 8. Например:

  1. для a=0, ближайшее большее целое число, кратное 8, равно 0.
  2. для от a=1 до a=7 ближайшее большее целое число, кратное 8, равно 8.
  3. для a=8, ближайшее большее целое число, кратное 8, равно 8.
  4. для от a=x*8+1 до a=x*8+7 ближайшее большее целое число, кратное 8, равно a=(x+1)*8.
  5. для a=x*8, ближайшее большее большее целое число, кратное 8, само равно a=x*8.

Как мне реализовать эту функцию int nearestBiggerIntegerDevisibleBy8(int a) в битовой операции C ++ (самая быстрая)?

1 Ответ

6 голосов
/ 06 марта 2020

Это один из способов go об этом

#include <stdio.h>

int nearestBiggerInt(int n){ 
    n += 7;
    return (n & ~7);
}

int main()
{
    for (int i = 0; i < 20; i++)
        printf("%d -> %d\n", i, nearestBiggerInt(i));
    return 0;
}

Вывод

0 -> 0
1 -> 8
2 -> 8
3 -> 8
4 -> 8
5 -> 8
6 -> 8
7 -> 8
8 -> 8
9 -> 16
10 -> 16
11 -> 16
12 -> 16
13 -> 16
14 -> 16
15 -> 16
16 -> 16
17 -> 24
18 -> 24
19 -> 24
...