Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Когда ассоциативность работает справа налево?

Сокур Евгений Профи (958), на голосовании 2 месяца назад
Операции одинакового ранга имеют один приоритет и выполняются по правилу ассоциативности. Или слева направа, или справа налево.

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

#include <stdio.h>

int main (void) {
int i = 0++;
if (i == 1||130&&2){
printf("ИДИНИЧКА")
}
return 404;
}
Дополнен 3 месяца назад
Всех благодарю, вы мне помогли. Спаси Боженька!
Голосование за лучший ответ
- Мастер (1168) 3 месяца назад
В данном примере ассоциативность не играет роли, так как ты спутал ее с порядком вычисления.
Сокур ЕвгенийПрофи (958) 3 месяца назад
Смысля?
- Мастер (1168) Сокур Евгений, Ассоциативность определяет порядок операций одинакового приоритета, стоящих подряд. Пример: a = b = c = 5. Ассоциативность справа налево значит a = (b = (c = 5)). Порядок вычисления в выражении i = 0++ определяется постфиксным инкрементом ++. Он сначала возвращает значение, затем увеличивает его. Поэтому i будет равен 0, несмотря на инкремент.
Сокур ЕвгенийПрофи (958) 3 месяца назад
ну если, например, заменить && на || в условии то что будет в итоге?
- Мастер (1168) Сокур Евгений, Если заменить && на || в условии if (i == 1 || 130 || 2), то результат выполнения программы не изменится, и на экран все равно будет выведена строка "ИДИНИЧКА".
Сокур ЕвгенийПрофи (958) 3 месяца назад
Понял, сейчас прочту, слишком поспешил с вопросами
Лев Перфилов Просветленный (26019) 3 месяца назад
Так что непонятно? У тебя слева 1 и справа 1, дизъюнкция вернёт 1. Да даже если не по правилам булевой алгебры, конъюнкция вернёт 1, ведь слева 1 (1||130 == 1), а справа 2 (что си приравнивает к истине, т.е. 1).
Сокур ЕвгенийПрофи (958) 3 месяца назад
в общем я повыпендривался нехило так (некрасиво поступил), давай лучше другой пример:

int main (void) {
int i = 1;
if (i == 2&&130||1||4||8){
printf("истина")
}
return 404;
}

Что вернет, ложь или истину?
Лев Перфилов Просветленный (26019) Сокур Евгений, Истину. Потому что на практике правила булевой логики не соблюдают.
Похожие вопросы