1 | |||||||||||
Тест на знание Си18.07.2023, 22:04. Показов 736. Ответов 9
Метки нет Все метки)
(
Здравствуйте !
Учу Си по онлайн-курсу. Даны два следующих кода :
Буду рад если обьясните...
0
|
18.07.2023, 22:04 | |
Ответы с готовыми решениями:
9
Тест на знание C++ Тест на знание Delphi Тест на знание php |
![]() 1781 / 1242 / 619
Регистрация: 17.03.2022
Сообщений: 3,944
|
|
18.07.2023, 22:15 | 2 |
![]() Решение
Ну очевидно, что в одном случае инкремент z срабатывает, в другом - нет.
А разница в том, что для вычисления значения первого логического выражения нужно выяснить, что находится в последней его части (x && y дают 0, результат определяется оставшейся частью), а во втором случае - нет, до инкремента дело просто не доходит.
1
|
![]() 1781 / 1242 / 619
Регистрация: 17.03.2022
Сообщений: 3,944
|
|
18.07.2023, 22:32 | 4 |
max_sk, а погуглить вы самостоятельно не можете?
Первая. И, что интересно, в данном случае эта информация вам совершенно не нужна. Нет. А вот тут перед изучением языка полезно немного изучить матлогику (ну или просто немного подумать, припомнив сведения из 2, кажется, класса школы).
1
|
19.07.2023, 19:11 [ТС] | 5 |
Почитал тут статью Майкрософта на эту тему... То есть, если я правильно понимаю в выражении x && y || z++ x && y дают false ( логическое 0 ) и дальше 0 || z дают true, т.е. логическое 1 и поэтому выполняется z++, т.е. z становится равным 6.
В следующем коде дано выражение x && y && z++. X && y дает логическое 0 и далее 0 && z тоже дает логическое 0. И поэтому z++ не выполняется и z остается 5 Я прав ? Тогда почему утверждается, что операция ++ имеет больший приоритет, чем && и ||, если сначала выполняются они ?
0
|
Заблокирован
|
|
19.07.2023, 19:19 | 6 |
Только в том случае, когда нужно выполнить эту операцию. Но если заведомо результат логической операции равен false, никаких дальнейших вычислений проводиться не будет: зачем?
Об этом всегда необходимо помнить, чтобы на "UB" не нарваться (которое на самом деле не UB, а косяк программиста).
1
|
![]() 1781 / 1242 / 619
Регистрация: 17.03.2022
Сообщений: 3,944
|
|
19.07.2023, 19:49 | 7 |
Да, только вам это уже в первом ответе было написано.
Потому что это постинкремент, ключевая часть выделена жирным. Сначала используется значение, потом выполняется инкремент. Но если значение не используется...
1
|
Неэпический
![]() |
|
20.07.2023, 12:09 | 8 |
Это особенность операторов && и ||. Назовем её "ленивые вычисления" - если результат правой части ни на что повлиять не может, то вычисление и не выполняется.
Соответственно, для логического ИЛИ правая часть не имеет смысла, если левая равна TRUE - TRUE || (что угодно) всегда даст TRUE. А для логического И правая часть не имеет смысла, если левая часть равна FALSE - FALSE && (что угодно) всегда даст FALSE.![]() ![]() x && y || z++; x && y && z++; при x=1,y=0,z=5; , тогдаx && y всегда дает FALSE (1 && 0 = 0 ), следовательно:FALSE || z++; FALSE && z++; В первом случае, правая часть может повлиять на результат (левая часть равна 0), поэтому z++ вычисляется.Во втором случае, правая часть не может повлиять на результат (левая часть равна 0), поэтому z++ не вычисляется.
0
|
![]() 479 / 345 / 64
Регистрация: 09.03.2016
Сообщений: 3,417
|
||||||
20.07.2023, 13:26 | 9 | |||||
Когда то разбирался....
На плюсы похоже, да здесь ни чего особенного нет...
0
|
Вездепух
![]() ![]() ![]() 12860 / 6725 / 1808
Регистрация: 18.10.2014
Сообщений: 17,026
|
|
20.07.2023, 20:52 | 10 |
Нет, не правильно. Ни о каком "дальше 0 || z дают true" речи не идет.
Значение имеет только то, что "x && y дают false". Это значит, что для того, чтобы вычислить || , левой части недостаточно. Нужно вычислять правую часть, то есть z++ . При этом и происходит увеличение z .Нет, опять же "далее 0 && z тоже дает логическое 0" здесь ни при чем. Значение имеет только то, что x && y дает 0. Это сразу означает, что все выражение дает 0. Вычислять последнюю часть, то есть z++ , в такой ситуации не требуется (и не разрешается). Поэтому z не меняет значения.Приоритеты операций не имеют никакого отношения к порядку их выполнения. Приоритеты операций диктуют только способ синтаксического разбора выражения: какие операнды нужно отдать каким операторам. А на то, что выполнять "сначала", приоритеты операций никакого влияния не оказывают.
0
|
20.07.2023, 20:52 | ||||||
Помогаю со студенческими работами здесь
10
Тест на знание ассемблера Тест на знание Windows Тест на знание предмета Пройдите тест на знание ATmega Программа тест на знание Си++ не работает Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
![]() |
Новые блоги и статьи
![]() |
||||
Осваиваем Kubernetes: Подробная шпаргалка
Mr. Docker 15.03.2025
Kubernetes — это открытая платформа для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Он был создан для решения проблем, с которыми сталкиваются. . .
|
Лучшие PHP REST API фреймворки
Jason-Webb 15.03.2025
Современные PHP REST API фреймворки предлагают большой набор функциональности: от автоматической валидации данных и управления маршрутизацией до генерации документации и интеграции с различными. . .
|
Многопоточность в Java с Project Loom: виртуальные или обычные потоки
Javaican 15.03.2025
Многопоточность всегда была одноим из основных элементов в разработке современного программного обеспечения. Она позволяет приложениям обрабатывать несколько задач одновременно, что критично для. . .
|
Что нового в Swift 6 и особенности миграции
mobDevWorks 15.03.2025
Swift 6 — это новый крупный релиз языка программирования от Apple, анонсированный на WWDC 2024. Если вы следили за эволюцией Swift, то наверняка заметили, что многие значимые возможности, которые. . .
|
Вопросы на собеседовании по Android
mobDevWorks 14.03.2025
По данным статистики, Android занимает более 70% мирового рынка мобильных операционных систем, что делает платформу привлекательной как для начинающих разработчиков, так и для опытных профессионалов. . . .
|
Лучшие игровые движки для Python
py-thonny 14.03.2025
Python обеспечивает разработчиков игр мощными движками и фреймворками, которые позволяют воплотить практически любую идею — от простой аркады до визуального романа с разветвленным сюжетом. Главное. . .
|
Бессерверный JavaScript: Разработка масштабируемых API с AWS Lambda
run.dev 14.03.2025
Но что такое бессерверные вычисления на самом деле? По сути, это модель облачных вычислений, где разработчик фокусируется исключительно на создании бизнес-логики, не тратя время на настройку. . .
|
Безопасность кода в C++26: Менеджеры ресурсов и висячие ссылки
NullReferenced 14.03.2025
C++ всегда был языком, предоставляющим разработчикам большие возможности и гибкость, но вместе с тем требующим ответственности. Одной из самых коварных проблем даже для опытных программистов остаются. . .
|
smart-agent proper interface settings (2025)
jigi33 14.03.2025
Smart-agent proper interface settings (mart 2025).
(see screenshots to look at "Etalon" ARM)
|
Продвинутые настройки JVM
Javaican 14.03.2025
Стандартные параметры запуска JVM хороши для повседневной разработки, но совершенно недостаточны для высоконагруженных систем. Представьте, что вы запускаете финансовую платформу, обрабатывающую. . .
|