Форум программистов, компьютерный форум CyberForum.ru

Оператор if и логическая операция И (AND) && - C++

Восстановить пароль Регистрация
 
VladimirU
120 / 98 / 18
Регистрация: 14.02.2013
Сообщений: 742
18.02.2014, 21:06     Оператор if и логическая операция И (AND) && #1
Вод подскажите что будет быстрей обрабатываться процессором:

C++
1
2
3
4
if(!a&&!b)
{
a+b;
}
или

C++
1
2
3
4
5
6
7
if(!a)
{
if(!b)
{
a+b;
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 21:06     Оператор if и логическая операция И (AND) &&
Посмотрите здесь:

C++ Побитовая операция &
C++ Оператор &
C++ Побитовая операция &
C++ Чем оператор || отличается от оператора && ?
Оператор && C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Megabar
22 / 22 / 3
Регистрация: 01.12.2013
Сообщений: 93
18.02.2014, 21:07     Оператор if и логическая операция И (AND) && #2
VladimirU, могу предположить, что компилятор оптимизирует второй код. Они будут равны.
VladimirU
120 / 98 / 18
Регистрация: 14.02.2013
Сообщений: 742
18.02.2014, 21:16  [ТС]     Оператор if и логическая операция И (AND) && #3
Да точно так и есть Megabar,.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
18.02.2014, 21:23     Оператор if и логическая операция И (AND) && #4
Цитата Сообщение от VladimirU Посмотреть сообщение
Вод подскажите что будет быстрей обрабатываться процессором:
одинаково
чтобы понять это нужно вспомнит как ведет себя && если первое ложь(0) то второе не вычисляется
удобно проверять деление
C++
1
if(a && b/a)
никогда не будет деления на 0


в результате
если а не равно 0 то выходим
если равно проверяем b
если не ноль то выходим
иначе суммируем 0+0 вопрос зачем?
как видишь по шагам точно тоже самое что и вторая конструкция

Добавлено через 3 минуты
Цитата Сообщение от Megabar Посмотреть сообщение
что компилятор оптимизирует второй код.
оптимизирует он как раз первый приведет примерно к такому виду
Assembler
1
2
3
4
5
6
7
and eax,eax
jnz exit
and ebx,ebx
jnz exit
add eax,ebx
exit:
.............
v_krasnoselska
0 / 0 / 0
Регистрация: 06.10.2014
Сообщений: 7
06.10.2014, 23:15     Оператор if и логическая операция И (AND) && #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;
 
int main()
{
    int x, y;
    cout << "Vvedite x: ";
    cin >> x;
    if ((x >= 2) || (y*y!=4))
    {
     y =-x; // выполняется, если х меньше нуля
    } else
           {
             if ( (x >= 0) && (y*y > 4) )
             {
                y = x; // выполняется, если х больше либо равно нуля и меньше 30
             } else
                     {
                       if ((x*y!=4) && (y>x))
                       {
                        y = x/2 ; // выполняется, если х больше либо равен 30
                       }
                     }
           }
    cout << "y=" << y << endl;
    system("pause");
    return 0;
Объясните в чём ошибка "конец файла обнаружен ранее, чем левая фигурная скобка". Вот условие задания. Написать программу, позволяющую вывести на экран значения следующих логических выражений:а)х>=2 или y^2 не равно 4, при х=2 и у=-2;б)х>=0 и y^2 >4, при х=2 и у=2;в)х*у не равно 4 и у>x, при х=1 и у=2
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
06.10.2014, 23:36     Оператор if и логическая операция И (AND) && #6
Если не ошибаюсь, это называется short-circuit evaluation. Т.е. когда второе условие не проверяется, в случае если первое == false.
Yandex
Объявления
06.10.2014, 23:36     Оператор if и логическая операция И (AND) &&
Ответ Создать тему
Опции темы

Текущее время: 16:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru