Перейти к содержанию
    

Откель такие приоритеты операций в Си?

Вот скажите, что думали создатели Си делая побитные логические операции менее приоритетными чем операции сравнения? Можете привести хоть один пример где это принесло-бы пользу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

https://www.bell-labs.com/usr/dmr/www/chist.html

Думали они, что люди привыкли программировать на B, и переучиваться им будет сложно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в чем, собственно, неудобство? Зачем, например, в выражении

if(a == 10 || b == 20)

кучи лишних скобок?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, Arlleex said:

А в чем, собственно, неудобство? Зачем, например, в выражении


if(a == 10 || b == 20)

кучи лишних скобок?

У вас операция логическая. И здесь всё логично. Вопрос был про побитовые операции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Побитные не эти... Это ^ & |

Изменено пользователем GenaSPB

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прочитайте исходный пост автора. Там хрен пойми какие в итоге операции. Я сделал вывод, что там пропущен союз "и".между "побитные" и "логические".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 минут назад, Arlleex сказал:

Зачем, например, в выражении


if(a == 10 || b == 20)

кучи лишних скобок?

Само собой я говорил о побитовых операциях. К примеру, вот такое выражение

if(a & mask == 0) 

ошибочно и требует скобок в то время как 

if(a-b==0)

корректно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 minutes ago, artemkad said:

Само собой я говорил о побитовых операциях. К примеру, вот такое выражение


if(a & mask == 0) 

ошибочно и требует скобок в то время как 


if(a-b==0)

корректно?

Нет. Первое не ошибочно, и второе - не корректно. Вы упускаете то, что в них никак не выражено намерение разработчика, а оно выражается однозначно именно скобками, вне зависимости от приоритета операций. Я от своих ребят всегда требую ставить скобки, спрашивая: "Как мне узнать, что именно ты тут хотел сделать? Как проверить, ты правильно скобки опустил или ошибочно?"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

37 минут назад, one_eight_seven сказал:

Вы упускаете то, что в них никак не выражено намерение разработчика,

По-моему там все вполне однозначно. Я не могу представить разработчика который рискнет выполнять арифметическую или побитную операцию с результатом сравнения. Вы сможете однозначно сказать что является результатом успешного сравнения? К примеру чему равно 

3 == 3

?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

37 минут назад, one_eight_seven сказал:

..."Как мне узнать, что именно ты тут хотел сделать? Как проверить, ты правильно скобки опустил или ошибочно?"

Приоритеты операций от зубов должны отскакивать, особенно в мелких выражениях и когда программируешь более менее часто. Если выражение сложное, то я, например, стараюсь ставить скобки только там, где необходимо отделить одну крупную группу от другой (дабы глаза не замыливались). Иначе на каждый чих (на каждую операцию) рисовать скобки - получится синтаксический лес, за которым сосен не видно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, Arlleex said:

Приоритеты операций от зубов должны отскакивать, особенно в мелких выражениях и когда программируешь более менее часто

Глупость несусветная. Вы никогда не работали в коллективах с длинной цепочкой, верно? В разных языках приоритеты операций разные. И, если вы производите что-то посложнее драйвера светодиодов, то лучше думать над решением задачи в проблемной области, а не над приоритетами операций. Более того, ваш код могут пользовать люди, которые пишут, например, на SystemVerilog или Python. И у них от зубов отлетает совем другая прецедентность операций.

 

10 minutes ago, Arlleex said:

. Если выражение сложное, то я, например, стараюсь ставить скобки только там, где необходимо отделить одну крупную группу от другой (дабы глаза не замыливались). Иначе на каждый чих (на каждую операцию) рисовать скобки - получится синтаксический лес, за которым сосен не видно

Опять глупость. Есть возможности форматирования для группировки. Есть возможность применения промежуточных переменных, которые ещё  и покажут смысл промежуточных вычислений (а очень часто этот смысл есть). Ну и сли шком длинные выражения, которые не читаемы со скобками являются нечитаемыми и без скобок, но, кроме того, они ещё и не показывают, что именно программист хотел сделать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, one_eight_seven сказал:

В разных языках приоритеты операций разные.

Мы щас про Си говорим, так то.

Цитата

Более того, ваш код могут пользовать люди, которые пишут, например, на SystemVerilog или Python...

Ну раз пользуют - пусть именно пользуют, а не пытаются что-то там понять или исправить. Когда пытаешься исправить - будь добр знать инструментарий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

28 minutes ago, artemkad said:

По-моему там все вполне однозначно. Я не могу представить разработчика который рискнет выполнять арифметическую или побитную операцию с результатом сравнения. Вы сможете однозначно сказать что является результатом успешного сравнения? К примеру чему равно 

Переформулируйте. Вообще непонятно, что вы сказать хотели.

Just now, Arlleex said:

Ну раз пользуют - пусть именно пользуют, а не пытаются что-то там понять или исправить. Когда пытаешься исправить - будь добр знать инструментарий.

Вот если бы я не находил ошибки в прецедентности операций, я бы не требовал скобки. Потому что если код работает правильно, то вообще нет разницы, как он написан. А если неправильно, то разница есть. Как заставил ставить скобки, ошибки с прецедентностью прекратились. И чьи-то терзания по поводу "не слишком красивого кода", сопровождаются просьбой писать заявление по собственному желанию.

2 minutes ago, Arlleex said:

Мы щас про Си говорим, так то.

Да, про C. И что? Именно в Си делают ошибки с прецедентностью операций. И именно в Си скобки решают эти проблемы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...