3

可能重复:
按位并代替模运算符

有人可以解释使这两种表达方式等同的理由吗?我知道它只有效,因为 64 是 2 的幂,但是我如何在逻辑上或数学上从除法到按位和?

4

3 回答 3

9

该运算x % 64返回x除以 64 的余数,其中(假设 x>0)必须是 0 到 63 之间的数字。让我们看一下二进制:

63 dec = 0011 1111 b
64 dec = 0100 0000 b

您可以看到任何 64 倍数的二进制表示必须以 6 个零结尾。因此,将任何数字除以 64 时的余数是原始数字,除了最右边的 6 个位之外,所有位都被删除。

如果你对一个数字与 63 进行按位与运算,结果就是这 6 位。

于 2012-12-09T05:06:27.183 回答
3

每次进行位移时,这与除以 2 相同。这是因为二进制表示是以 2 为底的。这与以 10 为底的 123 中删除 3 得到 12 的方式相同,这就像将 123 除以 10。

% 是 mod 运算符,表示除法的余数。64 是 2 的 6 次方,所以除以 64 就像移出 6 位。除法的其余部分是您移出的那六位。您可以通过逐位运算找到这六个位的值,并且只设置低六位,即 63。

于 2012-12-09T05:06:24.433 回答
0

第一个给出余数。

第二个是短路(按位与)。

按位与,63(二进制为 111111)所以 LHS (x) 上的任何内容都是与,结果除 MSB 外相同。Ans so is the case with % with 64 (binary 100000), 除数和 MSB 保持不变。

于 2012-12-09T05:05:38.243 回答