C - 非 2 的幂数的模数按位运算的算法

标签 c bit-manipulation bitwise-operators

我知道可以使用按位运算符计算 2 的幂的模

  x % 2^n == x & (2^n - 1).

但我想知道是否存在任何通用的按位算法来找到任何数字的模数不是 2 的幂。例如,
 7%5 

先感谢您。

最佳答案

不,没有在不实际进行除法的情况下找到除法余数的通用方法。

由于二进制表示,二的幂是一个异常(exception),它允许您使用移位除以二。相同的原理正在发挥作用,它允许您通过简单地将数字从末尾删除来将十进制数除以十的幂。

显然,没有什么能阻止您编写代码 division using bit operations .您还需要对减法进行编码,因为该算法要求将其作为“原始运算”。可以想象,这将非常缓慢。

关于C - 非 2 的幂数的模数按位运算的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49949579/

相关文章:

c - 获取数字的左边数字?

php - 按位澄清

JavaScript 和位运算符

java - java中i &=(i-1) 的含义是什么

c# - 为什么 _ret 的计算结果为 true,它不应该计算为 false(位运算符)吗?

c - 有int数据类型的数组函数吗?

c - 在 C 中定义一个函数两次

c - 在嵌入式设备上绑定(bind)不同的技术

c - 在 c 中发出读取和打印 ip header ID

java - 按位与运算符的结果可以为负吗(Java 中)