Подтвердить что ты не робот

Мод мощности 2 по побитовым операторам?

  • Как mod of power of 2 работает только с битами младшего разряда двоичного числа (1011000111011010)?
  • Что это за номер mod 2 для питания 0, 2 для питания 4?
  • Какая сила 2 связана с оператором modulo? Имеет ли он особое свойство?
  • Может ли кто-нибудь дать мне пример?

Инструктор говорит: "Когда вы берете что-то модное до 2, вы просто берете бит младшего порядка". Я слишком боялся спросить, что он имел в виду =)

4b9b3361

Ответ 1

Он имел в виду, что принятие 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.

Иными словами, number mod 4 совпадает с number & 00000011 (где & означает побитовое и)


Обратите внимание, что это работает точно так же в base-10: number mod 10 дает вам последнюю цифру числа в base-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

Ответ 3

Рассмотрим, когда вы берете число по модулю 10. Если вы это сделаете, вы просто получите последнюю цифру числа.

  334 % 10 = 4
  12345 % 10 = 5

Аналогично, если вы принимаете число по модулю 100, вы просто получите последние две цифры.

  334 % 100 = 34
  12345 % 100 = 45

Итак, вы можете получить по модулю силы два, посмотрев на его последние цифры в двоичном формате. Это то же самое, что делать побитовое и.

Ответ 4

Modulo в целом возвращает остаток от значения после деления. Таким образом, x mod 4, например, возвращает 0, 1, 2 или 3 в зависимости от x. Эти возможные значения могут быть представлены с использованием двух битов в двоичном формате (00, 01, 10, 11). Другой способ сделать x mod 4 - просто установить все биты на ноль в x, за исключением последних двух.

Пример:

      x = 10101010110101110
x mod 4 = 00000000000000010

Ответ 5

Отвечая на ваши конкретные вопросы:

  • mod - оператор остатка. Если применить к серии чисел x в 0, 1,..., то x mod n будет 0, 1,..., n-1, 0, 1,..., n-1, ad infinitum. Когда ваш модуль n равен 2, тогда x mod n будет подсчитываться в двоичном формате от 0 до n-1, обратно до 0, до n-1 и т.д.; для модуля n, который выглядит как двоичный 01xxxxx, x mod n будет циклически проходить через каждый из этих младших битов xxxxx.
  • binary 1011000111011010 mod 1 равно 0 (mod 2 ^ 0 дает последние нулевые биты, все mod 1 равно нулю). двоичный код 1011000111011010 mod двоичный 10000 равен 1010 (mod 2 ^ 4 дает последние четыре бита).
  • Разделение и остальная часть двоичного числа по степеням двух особенно эффективны, поскольку он просто сдвигается и маскируется; математически это ничего особенного.
  • Пример: см. ответ на вопрос 2.