|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.11.2021, 13:58 | #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. Спасибо за терпение! |
24.11.2021, 14:02 | #2 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
Вы забываете про другие разряды:
Код:
|
24.11.2021, 14:19 | #3 |
Форумчанин
Регистрация: 22.03.2019
Сообщений: 115
|
|
24.11.2021, 14:24 | #4 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
|
24.11.2021, 14:26 | #5 |
Форумчанин
Регистрация: 22.03.2019
Сообщений: 115
|
|
24.11.2021, 14:29 | #6 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
Так сделайте опрерацию И поразрядно:
01111011 & 01000000 ----------- 01000000 01000000 != 00000001 |
24.11.2021, 14:32 | #7 |
Форумчанин
Регистрация: 22.03.2019
Сообщений: 115
|
|
24.11.2021, 14:34 | #8 |
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
|
Так это везде есть... https://ru.wikipedia.org/wiki/%D0%91...86%D0%B8%D1%8F
|
24.11.2021, 14:34 | #9 | |
Форумчанин
Регистрация: 22.03.2019
Сообщений: 115
|
Цитата:
|
|
30.11.2021, 17:50 | #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 |