首页 > 试题广场 >

将一个整数X提升到8的倍数(即1-8,8-8,25-3

[问答题]
将一个整数X提升到8的倍数(即1->8,8->8,25->32),可以通过表达式()来实现
推荐
(X+7)/8*8

整体思想就是最后和8相乘得到8的倍数
为了保证向上提升,加一个比8小的最大整数7,使其向上最接近8的倍数,然后整除8,再乘以8,记得到和X最接近的8的倍数。

参考:
http://www.dewen.io/q/8773/C%2FC%2B%2B%E4%B8%AD%E5%A6%82%E4%BD%95%E6%9C%89%E6%95%88%E5%9C%B0%E5%B0%86%E4%B8%80%E4%B8%AA%E6%95%B4%E6%95%B0a%E4%B8%8A%E8%B0%83%E8%87%B38%E7%9A%84%E5%80%8D%E6%95%B0%EF%BC%88%E6%9C%80%E5%B0%8F%E7%9A%84%E9%82%A3%E4%B8%AA%E6%95%B0%EF%BC%89
编辑于 2015-01-31 10:01:53 回复(1)
x+(8-x%8)%8

发表于 2015-11-01 20:07:50 回复(1)
如果x是8的倍数,返回8,如果不是8的倍数,x=(x/8+1)*8
x=x%8==0?x:(x/8+1)*8

发表于 2015-01-17 18:40:43 回复(0)
(X+7)/8<<3
编辑于 2019-03-14 12:44:59 回复(0)
问题是其次,我记得这个算法好像在一些内存格子分配的程序中出现过,就是这样来算路由到哪去
发表于 2022-12-07 16:35:22 回复(0)
//一个数是8的倍数,其二进制的特点:最低三位全为0
//若x不是8的倍数,x先右移3位,自增之后再左移3位,便可以得到不小于x的、最近的8的倍数
//若x已是8的倍数,直接返回,否则运算后会变为2x
int Test(int x)
{
    int temp = 0;
    int res = 0;
    temp = x >> 3;
    res = (x % 8) ? (++temp) << 3 : x;
    return res;
}

发表于 2022-03-09 16:00:46 回复(0)
x += (8 - x%8);

发表于 2020-04-02 05:22:33 回复(0)
((n/(8+1)+1)*8)
发表于 2019-09-25 15:58:58 回复(0)
简单,唯一的问题就是8的倍数也不给个长度限制,就暂且浪费的申请10000个int类型的空间了。
#include<iostream>
using namespace std;
int main() {
	int x, y, pos;
	int es[10000];
	cin >> x;
	for (int i = 0; i < 10000; i++) {
		es[i] = i * 8;
		if (x > es[i]) {
			y = es[i];
			pos = i;
		}
	}
	y = es[pos + 1];
	cout << y;
	return 0;
}


发表于 2019-09-07 16:50:07 回复(0)
void main()
{
    int x;
    scanf("%d", &x);
    int y = (int)x/8;
    return (y+1)*8;
}

发表于 2016-10-02 22:22:13 回复(0)
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

int x;
int temp;
cout<<"please input an int"<<endl;
cin>>x>>endl;
temp = x % 8;
x = (x - temp) + 8;
cout<<“提升到8的倍数后的x值:"<<x<<endl ;

发表于 2016-09-24 17:35:54 回复(0)
int Turn(int n)
{
   if(n<0)  // n是负数,输出错误
     return -1;
  else
     {
       if(n%8==0)  //n正好是8 的倍数,直接返回n
          return n;
       else 
          {
            int temp=n/8;
            return 8*(temp+1);  //n不是8的倍数,则将其提升到8的倍数并返回
          }
     }
}

发表于 2015-12-09 09:33:34 回复(0)
8的倍数,二进制后三位为0。可用位运算来进行乘除,取巧了。
(x + 7) & (-8)

编辑于 2015-11-14 15:02:01 回复(0)
x=x+8-x%8
编辑于 2015-03-15 12:15:07 回复(0)
x=x%8==0?x:x+8-(x%8)
发表于 2015-02-26 11:43:59 回复(0)