如何在 C++ 按位运算中计算最近的可被 8 整除的较大整数?

lin*_*bin 1 c++ math bitwise-operators

我需要计算可被 8 整除的最接近的较大整数。例如:

  1. 对于a=0,可被 8 整除的最接近的较大整数是0
  2. 对于 from a=1to a=7,可被 8 整除的最接近的较大整数是8
  3. 对于a=8,可被 8 整除的最接近的较大整数是8
  4. 对于 from a=x*8+1to a=x*8+7,可被 8 整除的最接近的较大整数是a=(x+1)*8
  5. 对于a=x*8,可以被 8 整除的最接近的较大整数是a=x*8它本身。

我应该如何int nearestBiggerIntegerDevisibleBy8(int a)在 C++ 按位运算(最快)中实现这个函数?

Era*_*lon 6

这是一种解决方法

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出

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
Run Code Online (Sandbox Code Playgroud)