【发布时间】:2012-04-01 16:16:26
【问题描述】:
我想要一个只使用移位、加法或减法运算来确定一个数字是否是 6 的倍数的算法。所以,基本上只是二进制运算。
到目前为止,我认为我应该将数字右移两次以除以 4,然后从中减去 6 一次。但我知道我的方法有问题,无法弄清楚是什么。
【问题讨论】:
-
您可以继续从数字中减去 6,然后看到它变为零。如果结果小于零,则它不能被 6 整除
-
效率不高,但您可以仅使用减法来实现模函数。
-
如果在实际程序中使用:不要这样做。只需使用
num % 6,让编译器找出最快的方法。很可能,简单地使用 CPU 的mod操作将比您想出的任何 bit-hacks 更快。