![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 22.03.2019
Сообщений: 115
|
![]()
И снова здравствуйте. Проблема в том что я не понимаю
![]() Поразрядным оператором И удобно также пользоваться для определения установленного или сброшенного состояния отдельного двоичного разряда. В предыдущей теме из книги Шилда, был такой пример: Код:
Если смотреть в двоичном представлении: Код:
& 00000001 Результат:00000000 Код:
& 00000001 Результат:00000001 В обоих операторах if из приведенной выше программы выполняется поразрядная операция И над числовыми значениями переменной num и 1. Если младший двоичный разряд числового значения переменной num установлен. т.е содержит двоичную 1, результат num & 1 оказывается равным 1. В противном случае он равен 0. Вопрос?????? Если мы говорим что младший разряд установлен то выводится 1 если нет то выводится 0. По результату видно что при нечетном числе 11 младший разряд установлен. Я так понимаю что мы применяем такую же методику в следующем коде. Код:
Проблема моего непонимания заключается именно в данном примере: Код:
Код:
Если вспомним что говорилось в книжке: Если младший двоичный разряд числового значения переменной num установлен. т.е содержит двоичную 1, результат num & 1 оказывается равным 1. В противном случае он равен 0. Но даже когда мы выполняем условие Код:
& 10000000 Младший двоичный разряд равен 0. Результат: 0 Выполняем следующую проверку переменой val. 01111011 & 01000000 Младший двоичный разряд равен 0. Вопрос! так почему при условии if((val & t) != 0) и if((val & t) == 1) Разные результаты, если в обоих случаях мы получаем 1 и я уже не говорю о том что.... Младший двоичный разряд равен 0. ![]() Спасибо за терпение! |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
![]()
Вы забываете про другие разряды:
Код:
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 22.03.2019
Сообщений: 115
|
![]() |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
![]() |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 22.03.2019
Сообщений: 115
|
![]() |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
![]()
Так сделайте опрерацию И поразрядно:
01111011 & 01000000 ----------- 01000000 01000000 != 00000001 |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 22.03.2019
Сообщений: 115
|
![]() |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
![]()
Так это везде есть... https://ru.wikipedia.org/wiki/%D0%91...86%D0%B8%D1%8F
|
![]() |
![]() |
![]() |
#9 | |
Форумчанин
Регистрация: 22.03.2019
Сообщений: 115
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 22.03.2019
Сообщений: 115
|
![]()
Привет!
Подскажи пожалуйста почему 01111011 & 01000000 ----------- 01000000 != 00000001 Почему тогда: 01000000 не может быть == 00000000? Я так понял из за разряда. Потому что разряд получается (01000000) 64 а нам нужно что бы наименьший разряд был 0? Последний раз редактировалось bITA666; 30.11.2021 в 17:54. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поразрядные операторы. | bITA666 | Помощь студентам | 3 | 05.11.2021 21:08 |
Поразрядные операции c++ | Artem78 | Общие вопросы C/C++ | 1 | 10.12.2013 13:36 |
Поразрядные операторы,операторы сдвига | alekopoko | Общие вопросы C/C++ | 1 | 11.04.2013 23:40 |
Поразрядные операции | Sv. | Общие вопросы C/C++ | 7 | 09.11.2012 00:15 |
Поразрядные операции | eds | Общие вопросы C/C++ | 1 | 30.10.2008 10:29 |