Является ли побитовое ИЛИ и ИЛИ НЕ тем же самым, что и сложение и вычитание, когда набор известен? - PullRequest
1 голос
/ 14 июня 2019

Если a = 2 и b = 4, где a OR b = 6 и (a|b) AND NOT b = a, то поразрядное AND NOT эквивалентно вычитанию, когда значение представляет собой набор флагов, который, как известно, включает удаляемый флаг?

То же самое для сложения?

Обратите внимание, что это в ситуации, когда известно, что флаги существуют в наборе. Никакого сложения или вычитания не произойдет, если флаг отсутствует.

Ответы [ 2 ]

2 голосов
/ 14 июня 2019

Если я правильно понял, что вы спрашиваете, да.Итак:

  • Если (a & b) == 0, то (a | b) == (a + b) и
  • Если (a | b) == a, то (a & ~b) == (a - b)

Как своего родаДоказательство того, что это сложение может быть записано как a + b == (a ^ b) + ((a & b) << 1) (что делает все суммы без переноса, а затем добавляет переносы отдельно).Поэтому, если a & b равно нулю, переносчики исчезают, и оно становится просто a ^ b, а это, в свою очередь, становится a | b.Аналогичная вещь происходит с вычитанием, когда мы знаем, что нет заимствований.

0 голосов
/ 14 июня 2019

Только если вы ORing со значениями, чьи 1-бит определенно не являются в первом операнде, или ANDing со значениями с отрицанием бита значений, чьи 1-бит определенно равны в первый операнд.

...