Нужна помощь в понимании этой линии
Заранее благодарю вас за этот основной вопрос.
Я просматриваю учебник и вижу эту строку.
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-го бита.