1011000111011010
)?インストラクターは、「MODを2の累乗にすると、その下位ビットを取得するだけです」と言います。私は彼が何を意味したのか尋ねるのが怖かった=)
彼は、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 4
はnumber & 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
10を法とする数を取得する場合を検討してください。これを行うと、数の最後の桁が得られます。
334 % 10 = 4
12345 % 10 = 5
同様に、100を法とする数を取る場合、最後の2桁を取得するだけです。
334 % 100 = 34
12345 % 100 = 45
したがって、最後の桁を2進数で見ると、2のべき乗のモジュロを取得できます。それはビット単位のandと同じです。
一般にモジュロは、除算後の値の残りを返します。したがって、たとえば_x mod 4
_は、xに応じて0、1、2、または3を返します。これらの可能な値は、バイナリ(00、01、10、11)の2ビットを使用して表すことができます-_x mod 4
_を行う別の方法は、最後の2ビットを除くxのすべてのビットをゼロに設定することです。
例:
_ x = 10101010110101110
x mod 4 = 00000000000000010
_
特定の質問に答える: