| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Поразрядные операторы |
| Автор: bITA 5.11.2021, 17:59 | ||||
| Возможностью проверять состояние отдельных двоичных разрядов с помощью по разрядного оператора & можно воспользоваться для написания программы, в которой отдельные двоичные разряды проверяемого значения типа byte приводятся в двоич ной форме. Ниже показан один из способов написания такой программы. // Показать биты, составляющие байт.
Выполнение этой программы дает следующий результат. 0 1 1 1 1 0 1 1 В цикле for из приведенной выше программы каждый бит значения переменной val проверяется с помощью поразрядного оператора И, чтобы выяснить, установлен ли этот бит или сброшен. Если он установлен, то выводится цифра 1, а если сброшен, то выводится цифра 0. Если в выражении:
заменить оператор неравенство на равенство ( == ) и заменить 0 на 1. Почему такой результат? : 0 0 1 Подскажите правильно ли я понял процесс проверки отдельного бита? Если есть нюансы просветите меня |
| Автор: Aa1 6.11.2021, 03:22 | ||||
Тогда уж пишите не
а
|
| Автор: bITA 13.11.2021, 11:53 | ||||||
Можешь подробно объяснить почему так происходит? ) == 0) - это проверка младшего разряда. В предыдущем примере я понял....
.... но в этом как то сложно. Почему так не происходит в данном примере? |
| Автор: xvr 13.11.2021, 13:13 | ||
Потому что так работают битовые логические операции. Ваше исходное число 123 это 01111011 в бинарном виде. Складываем по И с бегущей единицей, получаем:
|
| Автор: bITA 13.11.2021, 16:20 |
| Так почему тогда при if((val & t) ! = 0) все тоже самое 123 & 128 а результат другой? |
| Автор: xvr 15.11.2021, 15:02 | ||
Для 123 & 128 результат тот же - 0 при любом виде условия в if (==0 или !=1) А вот там, где должна быть 1 на выходе результат будет другой. Там 123 & <число> будет не 1, а это самое <число>, так что на == 1 его сравнивать некорректно |