按位运算符的幂2的调制?

时间:2011-07-12 20:29:23

标签: c math bit-manipulation bitwise-operators bitwise-and

  1. 2的幂的mod如何只对二进制数(1011000111011010)的低阶位起作用?
  2. 这个数字mod 2为0,2为4的电源是什么?
  3. 2的幂与模运算符有什么关系?它有特殊财产吗?
  4. 有人可以举个例子吗?
  5. 教练说:“当你把mod变为2的幂时,你只需要取其低阶位”。我太害怕问他的意思了=)

5 个答案:

答案 0 :(得分:46)

他的意思是,取number mod 2^n相当于剥离除n的{​​{1}}最低阶(最右边)位以外的所有内容。

例如,如果n == 2,

number

换句话说,number number mod 4 00000001 00000001 00000010 00000010 00000011 00000011 00000100 00000000 00000101 00000001 00000110 00000010 00000111 00000011 00001000 00000000 00001001 00000001 etc. number mod 4相同(其中number & 00000011表示按位 - 和)


请注意,这在base-10中完全相同:&为您提供base-10中数字的最后一位数字,number mod 10为您提供最后两位数字等。

答案 1 :(得分:31)

他的意思是:

x modulo y = (x & (y − 1))

当y是2的幂时。

示例:

0110010110 (406) modulo
0001000000 (64)  =
0000010110 (22)
^^^^<- ignore these bits

立即使用您的示例:

1011000111011010 (45530) modulo
0000000000000001 (2 power 0) =
0000000000000000 (0)
^^^^^^^^^^^^^^^^<- ignore these bits

1011000111011010 (45530) modulo
0000000000010000 (2 power 4) =
0000000000001010 (10)
^^^^^^^^^^^^<- ignore these bits

答案 2 :(得分:10)

考虑何时取数为10的数字。如果你这样做,你只需得到数字的最后一位数。

  334 % 10 = 4
  12345 % 10 = 5

同样,如果你取一个模数为100的数字,你只需得到最后两位数。

  334 % 100 = 34
  12345 % 100 = 45

因此,您可以通过查看二进制的最后一位数来获得2的幂的模数。这与做按位和。

相同

答案 3 :(得分:4)

模数通常在除法后返回值的余数。因此,x mod 4例如,根据x返回0,1,2或3。这些可能的值可以使用二进制(00,01,10,11)中的两位来表示 - 另一种方法x mod 4是简单地将所有位设置为x,除了最后两位之外。

示例:

      x = 10101010110101110
x mod 4 = 00000000000000010

答案 4 :(得分:2)

回答您的具体问题:

  1. mod是余数运算符。如果应用于0,1,...中的一系列数字x,则x mod n将为0,1,...,n-1,0,1,...,n-1,无限。当你的模数n是2的幂时,那么x mod n将以二进制从0到n-1,回到0,到n-1等计数;对于看起来像二进制01xxxxx的模数n,x mod n将循环遍历每个低位xxxxx。
  2. 二进制1011000111011010 mod 1为0(mod 2 ^ 0产生最后的零位; mod 1的所有内容均为零)。二进制1011000111011010 mod二进制10000是1010(mod 2 ^ 4产生最后四位)。
  3. 除以二进制数的二进制数的除法和余数特别有效,因为它只是移位和屏蔽;数学上没什么特别的。
  4. 示例:请参阅问题2的答案。