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