如何在 C++ 按位运算中计算可被 8 整除的最近的较大整数?
How to calculate nearest bigger integer divisible by 8 in C++ bitwise operation?
我需要计算能被 8 整除的最近的更大的整数。例如:
- 对于
a=0
,能被8整除的最接近的大整数是0
.
- 从
a=1
到a=7
,能被8整除的最近的大整数是8
.
- 对于
a=8
,能被8整除的最接近的大整数是8
.
- 从
a=x*8+1
到a=x*8+7
,能被8整除的最近的大整数是a=(x+1)*8
.
- 对于
a=x*8
,能被8整除的最近的较大整数是a=x*8
本身。
我应该如何在 C++ 按位运算中实现这个函数 int nearestBiggerIntegerDevisibleBy8(int a)
(最快)?
这是一种解决方法
#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
我需要计算能被 8 整除的最近的更大的整数。例如:
- 对于
a=0
,能被8整除的最接近的大整数是0
. - 从
a=1
到a=7
,能被8整除的最近的大整数是8
. - 对于
a=8
,能被8整除的最接近的大整数是8
. - 从
a=x*8+1
到a=x*8+7
,能被8整除的最近的大整数是a=(x+1)*8
. - 对于
a=x*8
,能被8整除的最近的较大整数是a=x*8
本身。
我应该如何在 C++ 按位运算中实现这个函数 int nearestBiggerIntegerDevisibleBy8(int a)
(最快)?
这是一种解决方法
#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