web-dev-qa-db-ja.com

ビット演算子のべき乗2のMod?

  1. 2のべき乗のmodは、2進数の下位ビット(1011000111011010)?
  2. この数字はmod 2の0乗、2の4乗ですか?
  3. 2のべき乗はモジュロ演算子と何の関係がありますか?特別なプロパティを保持していますか?
  4. 誰かが例を教えてもらえますか?

インストラクターは、「MODを2の累乗にすると、その下位ビットを取得するだけです」と言います。私は彼が何を意味したのか尋ねるのが怖かった=)

31
Zo Has

彼は、number mod 2^nを取得することは、nの最下位を除くすべてを取り除くことと同等であることを意味しました(right-most)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.

言い換えると、number mod 4number & 00000011と同じです(&はビット単位のANDを意味します)


これは10進数でもまったく同じように機能することに注意してください。number mod 10は10進数の最後の数字を、number mod 100は最後の2桁などを返します。

彼が意味するのはそれです:

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
32
user703016

10を法とする数を取得する場合を検討してください。これを行うと、数の最後の桁が得られます。

  334 % 10 = 4
  12345 % 10 = 5

同様に、100を法とする数を取る場合、最後の2桁を取得するだけです。

  334 % 100 = 34
  12345 % 100 = 45

したがって、最後の桁を2進数で見ると、2のべき乗のモジュロを取得できます。それはビット単位のandと同じです。

10
Brian

一般にモジュロは、除算後の値の残りを返します。したがって、たとえば_x mod 4_は、xに応じて0、1、2、または3を返します。これらの可能な値は、バイナリ(00、01、10、11)の2ビットを使用して表すことができます-_x mod 4_を行う別の方法は、最後の2ビットを除くxのすべてのビットをゼロに設定することです。

例:

_      x = 10101010110101110
x mod 4 = 00000000000000010
_
4
Antti

特定の質問に答える:

  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は最後の4ビットを生成します)。
  3. 2のべき乗による2進数の除算と剰余は、シフトとマスキングだけであるため、特に効率的です。数学的には特別なことではありません。
  4. 例:質問2の回答をご覧ください。
2
Liudvikas Bukys