c - 找到下一个除以 8 的数字?

标签 c algorithm bit-manipulation

嗨,这是一个面试问题。

对于任何给定的数字,计算下一个可以被 8 整除的数字。

即如果给定的数字是 43,我们的算法应该生成 48 作为结果。如果数字已经被 8 整除,它应该说 Number already divisible by 8 并产生下一个可以被 8 整除的数字。

我建议他们任何可被 8 整除的数字的最后三位为 0 (LSB+2,LSB+1,LSB)。但我无法给出确切的解决方案。

我说的是解决这个问题的正确方法,还是我们可以寻求一些更聪明的解决方案? 我需要通过位操作来做到这一点。

最佳答案

你走在正确的轨道上。

int next8(int n) {
    int bits = n & 7; // give us the distance to the previous 8
    if (bits == 0) printf("Number already divisible by 8");
    return n + (8-bits);
}

(注意:当本应是纯粹的函数打印某些东西时,我讨厌它,但任务要求如此。抱歉。)

关于c - 找到下一个除以 8 的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17945462/

相关文章:

c - 如何将 "float"变量分解为四个字节?

c++ - 在哪里可以找到适用于全屏模式的 Windows Vista 免费编译器?

c - 以下代码出现运行时错误

c - 一遍又一遍地在String中使用struct(C语言)

c - 如何解决c中的超时错误?

python - 算法 : Square root optimization

c - 如何通过c中的引用将结构传递给函数

algorithm - 通过 restful API 通过指定的 id 保护对数据库中资源的访问

c - 为什么我不能使用 int 的第一位?

c++ - 人们如何想出按位问题的解决方案?