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

Zo *_*Has 32 c math bit-manipulation bitwise-operators bitwise-and

  1. 2的幂的mod如何只对二进制数(1011000111011010)的低阶位起作用?
  2. 这个数字mod 2为0,2为4的功率是多少?
  3. 2的幂与模运算符有什么关系?它有特殊财产吗?
  4. 有人能举个例子吗?

教练说:"当你把mod变为2的幂时,你只需要取其低阶位".我太害怕问他的意思了=)

Blu*_*eft 50

他的意思是,number mod 2^n除了n最低位(最右边)的位之外,取出相当于除去number.

例如,如果n == 2,

number      number mod 4
00000001      00000001
00000010      00000010
00000011      00000011
00000100      00000000
00000101      00000001
00000110      00000010
00000111      00000011
00001000      00000000
00001001      00000001
etc.
Run Code Online (Sandbox Code Playgroud)

换句话说,number mod 4就像number & 00000011(在哪里&意味着按位 - 和)


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

  • 仅当所有操作数均为正时才如此!根据语言,行为会有所不同。例如在C中,`-5%4 == -1`,尽管事实是在代数中我们通常希望`-5 mod 4`为3(在C:`-5&(4-1)== 3例如,这意味着,如果左操作数不是无符号的,编译器将不会使用&来优化文字%4。 (2认同)

use*_*016 34

他的意思是:

x modulo y = (x & (y ? 1))
Run Code Online (Sandbox Code Playgroud)

当y是2的幂时.

例:

0110010110 (406) modulo
0001000000 (64)  =
0000010110 (22)
^^^^<- ignore these bits
Run Code Online (Sandbox Code Playgroud)

立即使用您的示例:

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

1011000111011010 (45530) modulo
0000000000010000 (2 power 4) =
0000000000001010 (10)
^^^^^^^^^^^^<- ignore these bits
Run Code Online (Sandbox Code Playgroud)


Bri*_*ian 10

考虑何时采用模数为10的数字.如果这样做,您只需得到数字的最后一位数.

  334 % 10 = 4
  12345 % 10 = 5
Run Code Online (Sandbox Code Playgroud)

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

  334 % 100 = 34
  12345 % 100 = 45
Run Code Online (Sandbox Code Playgroud)

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


Ant*_*tti 7

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

例子:

      x = 10101010110101110
x mod 4 = 00000000000000010
Run Code Online (Sandbox Code Playgroud)