所以有人告诉我,这是可以做到的,按位运算和掩码可能非常有用,但我必须在它们的工作方式上遗漏一些东西。
我试图计算一个数字,比如 x,是否是 y 的倍数。如果 x 是 y 的倍数,那么我想增加 x 以达到大于 x 的最接近的 y 倍数(以便所有 x 都适合结果)。我刚刚开始学习 C,并且很难理解其中的一些任务。
这是我尝试过的,但是当我输入 5、9 或 24 等数字时,我分别得到以下结果:0、4、4。
if(x&(y-1)){ //if not 0 then multiple of y
x = x&~(y-1) + y;
}
非常感谢任何解释,幕后发生的数学示例。
编辑:所以澄清一下,我有点理解位的移位来确定一个项目是否是一个倍数。(正如在回复中解释的那样,10100 是 101 的倍数,因为它刚刚被转移)。如果我有数字 16,即 10000,它的补码是 01111。我将如何使用这个补码来查看一个项目是否是 16 的倍数?也有人可以对上面给出的代码进行数字解释吗?展示这一点可能有助于我理解为什么它不起作用。一旦我了解它为什么不起作用,我相信我将能够自己解决问题。