artemkad 16 January 14, 2022 Posted January 14, 2022 · Report post Вот скажите, что думали создатели Си делая побитные логические операции менее приоритетными чем операции сравнения? Можете привести хоть один пример где это принесло-бы пользу? Quote Share this post Link to post Share on other sites More sharing options...
one_eight_seven 0 January 14, 2022 Posted January 14, 2022 · Report post https://www.bell-labs.com/usr/dmr/www/chist.html Думали они, что люди привыкли программировать на B, и переучиваться им будет сложно. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 35 January 14, 2022 Posted January 14, 2022 · Report post А в чем, собственно, неудобство? Зачем, например, в выражении if(a == 10 || b == 20) кучи лишних скобок? Quote Share this post Link to post Share on other sites More sharing options...
one_eight_seven 0 January 14, 2022 Posted January 14, 2022 · Report post 2 minutes ago, Arlleex said: А в чем, собственно, неудобство? Зачем, например, в выражении if(a == 10 || b == 20) кучи лишних скобок? У вас операция логическая. И здесь всё логично. Вопрос был про побитовые операции. Quote Share this post Link to post Share on other sites More sharing options...
GenaSPB 2 January 14, 2022 Posted January 14, 2022 (edited) · Report post Побитные не эти... Это ^ & | Edited January 14, 2022 by GenaSPB Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 35 January 14, 2022 Posted January 14, 2022 · Report post Прочитайте исходный пост автора. Там хрен пойми какие в итоге операции. Я сделал вывод, что там пропущен союз "и".между "побитные" и "логические". Quote Share this post Link to post Share on other sites More sharing options...
x893 4 January 14, 2022 Posted January 14, 2022 · Report post 2 hours ago, artemkad said: что думали создатели Си Что они создатели. Quote Share this post Link to post Share on other sites More sharing options...
artemkad 16 January 14, 2022 Posted January 14, 2022 · Report post 16 минут назад, Arlleex сказал: Зачем, например, в выражении if(a == 10 || b == 20) кучи лишних скобок? Само собой я говорил о побитовых операциях. К примеру, вот такое выражение if(a & mask == 0) ошибочно и требует скобок в то время как if(a-b==0) корректно? Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 35 January 14, 2022 Posted January 14, 2022 · Report post Насчет чисто битовых - это один из "бзиков" языка, темы поднимались много раз. Quote Share this post Link to post Share on other sites More sharing options...
one_eight_seven 0 January 14, 2022 Posted January 14, 2022 · Report post 20 minutes ago, artemkad said: Само собой я говорил о побитовых операциях. К примеру, вот такое выражение if(a & mask == 0) ошибочно и требует скобок в то время как if(a-b==0) корректно? Нет. Первое не ошибочно, и второе - не корректно. Вы упускаете то, что в них никак не выражено намерение разработчика, а оно выражается однозначно именно скобками, вне зависимости от приоритета операций. Я от своих ребят всегда требую ставить скобки, спрашивая: "Как мне узнать, что именно ты тут хотел сделать? Как проверить, ты правильно скобки опустил или ошибочно?" Quote Share this post Link to post Share on other sites More sharing options...
artemkad 16 January 14, 2022 Posted January 14, 2022 · Report post 37 минут назад, one_eight_seven сказал: Вы упускаете то, что в них никак не выражено намерение разработчика, По-моему там все вполне однозначно. Я не могу представить разработчика который рискнет выполнять арифметическую или побитную операцию с результатом сравнения. Вы сможете однозначно сказать что является результатом успешного сравнения? К примеру чему равно 3 == 3 ? Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 35 January 14, 2022 Posted January 14, 2022 · Report post 37 минут назад, one_eight_seven сказал: ..."Как мне узнать, что именно ты тут хотел сделать? Как проверить, ты правильно скобки опустил или ошибочно?" Приоритеты операций от зубов должны отскакивать, особенно в мелких выражениях и когда программируешь более менее часто. Если выражение сложное, то я, например, стараюсь ставить скобки только там, где необходимо отделить одну крупную группу от другой (дабы глаза не замыливались). Иначе на каждый чих (на каждую операцию) рисовать скобки - получится синтаксический лес, за которым сосен не видно. Quote Share this post Link to post Share on other sites More sharing options...
one_eight_seven 0 January 14, 2022 Posted January 14, 2022 · Report post 8 minutes ago, Arlleex said: Приоритеты операций от зубов должны отскакивать, особенно в мелких выражениях и когда программируешь более менее часто Глупость несусветная. Вы никогда не работали в коллективах с длинной цепочкой, верно? В разных языках приоритеты операций разные. И, если вы производите что-то посложнее драйвера светодиодов, то лучше думать над решением задачи в проблемной области, а не над приоритетами операций. Более того, ваш код могут пользовать люди, которые пишут, например, на SystemVerilog или Python. И у них от зубов отлетает совем другая прецедентность операций. 10 minutes ago, Arlleex said: . Если выражение сложное, то я, например, стараюсь ставить скобки только там, где необходимо отделить одну крупную группу от другой (дабы глаза не замыливались). Иначе на каждый чих (на каждую операцию) рисовать скобки - получится синтаксический лес, за которым сосен не видно Опять глупость. Есть возможности форматирования для группировки. Есть возможность применения промежуточных переменных, которые ещё и покажут смысл промежуточных вычислений (а очень часто этот смысл есть). Ну и сли шком длинные выражения, которые не читаемы со скобками являются нечитаемыми и без скобок, но, кроме того, они ещё и не показывают, что именно программист хотел сделать. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 35 January 14, 2022 Posted January 14, 2022 · Report post 4 минуты назад, one_eight_seven сказал: В разных языках приоритеты операций разные. Мы щас про Си говорим, так то. Цитата Более того, ваш код могут пользовать люди, которые пишут, например, на SystemVerilog или Python... Ну раз пользуют - пусть именно пользуют, а не пытаются что-то там понять или исправить. Когда пытаешься исправить - будь добр знать инструментарий. Quote Share this post Link to post Share on other sites More sharing options...
one_eight_seven 0 January 14, 2022 Posted January 14, 2022 · Report post 28 minutes ago, artemkad said: По-моему там все вполне однозначно. Я не могу представить разработчика который рискнет выполнять арифметическую или побитную операцию с результатом сравнения. Вы сможете однозначно сказать что является результатом успешного сравнения? К примеру чему равно Переформулируйте. Вообще непонятно, что вы сказать хотели. Just now, Arlleex said: Ну раз пользуют - пусть именно пользуют, а не пытаются что-то там понять или исправить. Когда пытаешься исправить - будь добр знать инструментарий. Вот если бы я не находил ошибки в прецедентности операций, я бы не требовал скобки. Потому что если код работает правильно, то вообще нет разницы, как он написан. А если неправильно, то разница есть. Как заставил ставить скобки, ошибки с прецедентностью прекратились. И чьи-то терзания по поводу "не слишком красивого кода", сопровождаются просьбой писать заявление по собственному желанию. 2 minutes ago, Arlleex said: Мы щас про Си говорим, так то. Да, про C. И что? Именно в Си делают ошибки с прецедентностью операций. И именно в Си скобки решают эти проблемы. Quote Share this post Link to post Share on other sites More sharing options...