Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Логическое и в if 
:(
    Опции темы
Toyamatokanava
Дата 26.11.2015, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Здравствуйте, вызвали непонятки в работе логического и. Когда переменные х и у равны, то программа проверяя условие увеличит у на 1, а х останется равный 0. Если у сделать равным 1, то у увеличится на 1 и х тоже. Почему так получается? Понятно, то в блок условия программа не зайдет.

Код

#include "stdafx.h"
#include <iostream>
#include <locale.h>
#include <conio.h>
using namespace std;
int main(int argc, char** argv)
{
    int x = 0;
    int y = 0;

    if (y++ && x++)
    {
        y += 2;
    }
    cout << "y=" << y << endl;
    cout << "x=" << x<< endl;
    cout <<"x+y = "<< x + y <<endl;
    _getch();
    return 0;
}


Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  3.jpg 39,27 Kb
PM MAIL   Вверх
konshyn
Дата 26.11.2015, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(Toyamatokanava @  26.11.2015,  18:06 Найти цитируемый пост)
Здравствуйте, вызвали непонятки в работе логического и. Когда переменные х и у равны, то программа проверяя условие увеличит у на 1, а х останется равный 0. Если у сделать равным 1, то у увеличится на 1 и х тоже. Почему так получается? Понятно, то в блок условия программа не зайдет.

Потому что если первое утверждение ложно, то и все остальное ложно. Проверять дальше смысла нет.


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
math64
Дата 27.11.2015, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Внутри условий не стоит употреблять действия, имеющие побочный эффект.
&& и || вычисляют левый операнд, и если результат ясен, правый операнд не вычисляется.
Также в condition ? expr1 : expr2 вычисляется только одно из выражений expr1 или expr2.
Случаи когда пользуются этими особенностями && и ||
Код

if(pointer != NULL && pointer->field != value) ...

Второе условие вычисляется, если указатель ненулевой, иначе была бы ошибка доступа.
Код

//1
func1() && func2();
// эквивалентный код
if (func1()) func2();
//2
func1() || handleError();
// эквивалентный код
if (!func1()) handleError();

func1() возвращает ненулевое значение при успешном выполнении.
PM   Вверх
disputant
  Дата 28.11.2015, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 28.11.2011

Репутация: нет
Всего: 3



Цитата(konshyn @ 26.11.2015,  18:51)
Потому что если первое утверждение ложно, то и все остальное ложно. Проверять дальше смысла нет.

Самое главное то, что это - не оптимизация, а железное требование стандарта!

Это сообщение отредактировал(а) disputant - 28.11.2015, 11:45
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.4818 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.