Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2015, 19:37   #1
Niddin_hp
Пользователь
 
Регистрация: 06.10.2015
Сообщений: 12
По умолчанию Решение выражения

Вопрос состоит вот в чем. Дан кусочек программы :

int x,y,z;
x=y=z=1;
++x||++y&&++z;
printf('%d %d %d',x,y,z);

Выводит : 2 1 1. Почему?

Ну и второй вопрос такой же,но выражение : ++x&&++y&&++z;
Выводит: 2 2 2. По какому принципу считать? И как вообще присвоение идёт?
Niddin_hp вне форума Ответить с цитированием
Старый 06.10.2015, 19:48   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

оптимизация булевых операторов... ++х преобразуется в (++х > 0), что true.... если стоит || (или), то правую часть нет смысла считать т. к. левая часть true и правой части это не изменить никак
вариант && возвращает 2 2 2 т. к. у && (и) важны обе части.... попробуй написать --x&&++y&&++z
GreenWizard вне форума Ответить с цитированием
Старый 06.10.2015, 19:53   #3
Niddin_hp
Пользователь
 
Регистрация: 06.10.2015
Сообщений: 12
По умолчанию

Спасибо тебе большое) А то в книге,которую нам преподаватель посоветовал, об этом слова не написано)
Niddin_hp вне форума Ответить с цитированием
Старый 06.10.2015, 20:06   #4
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

чуть добавлю)
выражение вида a && b можно представить/заменить псевдокодом/функцией:
Код:
if(a)
  if(b)
    return(true);
return(false);
a || b:
Код:
if(a) return(true);
if(b) return(true);
return(false);
как видно, в случае &&, b будет вычислено и проверено если а = true, а вот || дойдёт до проверки b при a = false
ну и плюс такое правило: если в логическом выражении присутствует НЕ логическая переменная, то её пытаются сравнивать с 0, чтоб получить логическое значение

штука необычная, порой она ошибки вносит, но порой сильно упрощает код (пример см. в группе у меня, там на РНР пример)
GreenWizard вне форума Ответить с цитированием
Старый 06.10.2015, 20:48   #5
Niddin_hp
Пользователь
 
Регистрация: 06.10.2015
Сообщений: 12
По умолчанию

Обязательно посмотрю,спасибо)
Niddin_hp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение выражения. Roman1295 Паскаль, Turbo Pascal, PascalABC.NET 6 19.12.2012 12:21
Решение выражения. Roman1295 Паскаль, Turbo Pascal, PascalABC.NET 4 19.12.2012 08:55
решение математического выражения akum905 Общие вопросы C/C++ 0 12.11.2011 00:04
Решение выражения ((D^2-A)^2\D^2+B)-20. Kroleg Помощь студентам 3 27.06.2011 19:40
решение выражения на паскале bonys91 Помощь студентам 2 02.04.2009 22:18