Нужна помощь в понимании этой линии
Заранее благодарю вас за этот основной вопрос.
Я просматриваю учебник и вижу эту строку.
int a = (n & 8) / 8
Предполагается, что это определяет, является ли четвертый бит справа двоичным представлением 0 или 1. Я понимаю понятие битов и т. д., Но я не понимаю, какое математическое уравнение (если таковое имеется) это представляет.
Может ли кто-нибудь объяснить, как это будет записано в математическом уравнении? Кроме того, Пожалуйста, дайте мне знать, если я пропал все остальное в моем понимании этой линии. Спасибо.4 ответа:
Выражение (n & 8 ) делает логические и n с 1000 двоичными.
Так что получается 4-й бит справа.
Затем, разделив это на 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-го бита.