可能重复:
按位并代替模运算符
有人可以解释使这两种表达方式等同的理由吗?我知道它只有效,因为 64 是 2 的幂,但是我如何在逻辑上或数学上从除法到按位和?
可能重复:
按位并代替模运算符
有人可以解释使这两种表达方式等同的理由吗?我知道它只有效,因为 64 是 2 的幂,但是我如何在逻辑上或数学上从除法到按位和?
该运算x % 64
返回x
除以 64 的余数,其中(假设 x>0)必须是 0 到 63 之间的数字。让我们看一下二进制:
63 dec = 0011 1111 b
64 dec = 0100 0000 b
您可以看到任何 64 倍数的二进制表示必须以 6 个零结尾。因此,将任何数字除以 64 时的余数是原始数字,除了最右边的 6 个位之外,所有位都被删除。
如果你对一个数字与 63 进行按位与运算,结果就是这 6 位。
每次进行位移时,这与除以 2 相同。这是因为二进制表示是以 2 为底的。这与以 10 为底的 123 中删除 3 得到 12 的方式相同,这就像将 123 除以 10。
% 是 mod 运算符,表示除法的余数。64 是 2 的 6 次方,所以除以 64 就像移出 6 位。除法的其余部分是您移出的那六位。您可以通过逐位运算找到这六个位的值,并且只设置低六位,即 63。
第一个给出余数。
第二个是短路(按位与)。
按位与,63(二进制为 111111)所以 LHS (x) 上的任何内容都是与,结果除 MSB 外相同。Ans so is the case with % with 64 (binary 100000), 除数和 MSB 保持不变。