|
Модераторы: bsa |
|
bITA |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 6.12.2020 Репутация: нет Всего: нет |
Возможностью проверять состояние отдельных двоичных разрядов с помощью по разрядного оператора & можно воспользоваться для написания программы, в которой отдельные двоичные разряды проверяемого значения типа byte приводятся в двоич ной форме. Ниже показан один из способов написания такой программы.
// Показать биты, составляющие байт.
Выполнение этой программы дает следующий результат. 0 1 1 1 1 0 1 1 В цикле for из приведенной выше программы каждый бит значения переменной val проверяется с помощью поразрядного оператора И, чтобы выяснить, установлен ли этот бит или сброшен. Если он установлен, то выводится цифра 1, а если сброшен, то выводится цифра 0. Если в выражении:
заменить оператор неравенство на равенство ( == ) и заменить 0 на 1. Почему такой результат? : 0 0 1 Подскажите правильно ли я понял процесс проверки отдельного бита? Если есть нюансы просветите меня |
||||
|
|||||
Aa1 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 26.11.2012 Репутация: нет Всего: 1 |
Тогда уж пишите не
а
|
||||
|
|||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
bITA |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 6.12.2020 Репутация: нет Всего: нет |
Можешь подробно объяснить почему так происходит? ) == 0) - это проверка младшего разряда. В предыдущем примере я понял....
.... но в этом как то сложно. Почему так не происходит в данном примере? Это сообщение отредактировал(а) bITA - 13.11.2021, 11:55 |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Потому что так работают битовые логические операции. Ваше исходное число 123 это 01111011 в бинарном виде. Складываем по И с бегущей единицей, получаем:
|
|||
|
||||
bITA |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 6.12.2020 Репутация: нет Всего: нет |
Так почему тогда при if((val & t) ! = 0) все тоже самое 123 & 128 а результат другой?
|
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Для 123 & 128 результат тот же - 0 при любом виде условия в if (==0 или !=1) А вот там, где должна быть 1 на выходе результат будет другой. Там 123 & <число> будет не 1, а это самое <число>, так что на == 1 его сравнивать некорректно |
|||
|
||||
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |