Нужна помощь в понимании этой линии


Заранее благодарю вас за этот основной вопрос.

Я просматриваю учебник и вижу эту строку.

int a = (n & 8) / 8
Предполагается, что это определяет, является ли четвертый бит справа двоичным представлением 0 или 1. Я понимаю понятие битов и т. д., Но я не понимаю, какое математическое уравнение (если таковое имеется) это представляет. Может ли кто-нибудь объяснить, как это будет записано в математическом уравнении? Кроме того, Пожалуйста, дайте мне знать, если я пропал все остальное в моем понимании этой линии. Спасибо.
4 2

4 ответа:

  1. Выражение (n & 8 ) делает логические и n с 1000 двоичными.

  2. Так что получается 4-й бит справа.

  3. Затем, разделив это на 8, сдвигает значение вправо на 3 двоичных места. То есть он перемещает 4-й бит на самое правое место.

, что более четко выражается как ">> 3 "

Таким образом, ваше общее выражение будет примерно таким:

  (n AND 1000 )  >> 3

И это оставляет 4-й бит N во временной переменной, как бит 0 (самый правый бит). Все остальные биты будут равны нулю из-за и.

8 в десятичной системе счисления это 1000 в двоичной

Так что если вы это сделаете bitwise AND с любым числом

n & 8

Он останется 8 только в том случае, если 4-й бит равен 1 и

Если вы снова разделите его на 8, он вернет 1, иначе ноль

Например

Для 9 (1001)

9 & 8

Будет

  1001
& 1000
 ------
  1000

Теперь для случая, когда четвертый бит равен 0

Для 7 (0111)

7 & 8 

Будет

  0111
& 1000
  -----
  0000
int a = (n & 8) / 8;

n & 8 применяет логическую маску AND к 4-му биту n;

     n: 11001010 // example value
     8: 00001000
result: 00001000

Деление этого числа на 8 приводит к получению наименьшего бита:

result: 00000001

Деление числа на 2^n сдвигает числа n бит вправо (точно так же, как умножение на 2^n сдвигает биты влево).

Результат присваивается переменной a, которая теперь содержит 0 или 1, в зависимости от значения 4-го бита.

Побитовый оператор работает с битами и выполняет побитовую операцию. Предположим, что a = 60; и b = 13; теперь в двоичном формате они будут выглядеть следующим образом:

a = 0011 1100
b = 0000 1101
a&b=0000 1100

Тогда a&b также является целым числом, которое далее делится на 8 в вашем примере.