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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.65
csrnsdrfg
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 7
#1

Как работает оператор if? - C++

10.01.2012, 19:18. Просмотров 2854. Ответов 22
Метки нет (Все метки)

Народ!
Операция сравнения возвращает ЧИСЛО, т.е. while и if принимают ЧИСЛО (0 - false, etc - true).
Вопрос 1) Почему нельзя записать так:
while ( if (3) );
Я этим хочу сказать следующее:
1) Проверяем истинность выражения в скобках while
2) Натыкаемся на if, проверяем истинность (ведь, я если б я туда поставил выражение: "5+3", он бы сначала посчитал его, потом сравнил)
3) if Возвращает true (3 - true)
4) Выражение в скобках while - true. Начинаем цикл
5) Тело цикла - пустой оператор. Возвращаемся к началу.
Вопрос 2) Как устроен оператор if? Прошу серьезно отнестись к вопросу. Ответы типа: "проверяет истинность. Возвращает число" и т.п. не принимаются.
Хочу услышать разумный ответ. Комп не понимает операции "проверить истинность". КАК ПРОИСХОДИТ эта самая проверка? Желательно максимально подробно.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 290
10.01.2012, 19:34     Как работает оператор if? #2
А в чём проблема?
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.01.2012, 19:37     Как работает оператор if? #3
Потому, что if() без тела не отработает.
Точнее отработает, но вот так "if(3);", что никакой смысловой нагрузки не несет.

А сам по себе if ничего не возвращает. С какой радости у вас while(if(3)) должно отработать?
TamTam
18 / 18 / 1
Регистрация: 28.12.2011
Сообщений: 176
10.01.2012, 19:41     Как работает оператор if? #4
А что, если вы писали 5+3, то работало?)

После ифа должно быть выражение, истиность или ложность которого оно возвращает. если гдето раньше 3 присвоили true (хотя так вроде нельзя), то должно быть напр 3 = true, ну или 3 = 3.

А 0 - false это общее обозначение. Так можно в алгоритмах писать, и может на ассемблерах каких.

И где это у нас etc - true, никогда не встречалось, только 1 - true (система то двоичная, ничего другого и нет)
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.01.2012, 19:43     Как работает оператор if? #5
Цитата Сообщение от TamTam Посмотреть сообщение
После ифа должно быть выражение, истиность или ложность которого оно возвращает
Куда оно возвращает?
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,905
10.01.2012, 19:45     Как работает оператор if? #6
1) Оператор if ничего не возвращает, он всего лишь проверяет истинность условия.
2) Достаточно открыть любую книгу по ассемблеру и прочитать про команды условного перехода.
TamTam
18 / 18 / 1
Регистрация: 28.12.2011
Сообщений: 176
10.01.2012, 19:47     Как работает оператор if? #7
проверяет, проверяет. не возвращает
csrnsdrfg
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 7
10.01.2012, 19:49  [ТС]     Как работает оператор if? #8
Да, спасибо. Третий пункт мой затуп. Можно теперь про if конкретно инфу получить?
TamTam
18 / 18 / 1
Регистрация: 28.12.2011
Сообщений: 176
10.01.2012, 19:57     Как работает оператор if? #9
if ( выражение )
оператор_1;
else
оператор_2;


часть else может и отсутствовать. Сначала вычисляется "выражение" в скобках; если оно истинно то выполняется оператор_1. Если "выражение" ложно, то оператор_1 пропускается, а выполняется оператор_2. Если на месте условно выполняемых операторов должна располагаться группа из нескольких операторов языка, то они заключаются в фигурные скобки - { }.
csrnsdrfg
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 7
10.01.2012, 20:02  [ТС]     Как работает оператор if? #10
TamTam, я это все знаю.
Ты мне лучше скажи, как просходит само определение истинности? Как комп понимает, что !(PI>8.35) - true??????

Добавлено через 2 минуты
По теме еще один вопрос...
Почему нельзя писать так: while (ch = getchar != EOF) ...

Операция сравнения имеет больший приоретет, чем присваивание. Я понимаю, что этим хитрожопно присваиваю значение 1 (в случае getchar () != [ctrl +z]) или 0 (в остальных случаях). Но все-таки, почему компилятор распознает это как ошибку?
DebieCooper
34 / 34 / 1
Регистрация: 12.10.2011
Сообщений: 290
10.01.2012, 20:03     Как работает оператор if? #11
Полная форма предложения if выглядит так:
if(выражение) предложение;
else предложение;

Общая форма с использованием блоков выглядит так:
if(выражение)
{
последовательность предложений
}
else
{
последовательность предложений
}

Простой пример. Знаменитая программа "Магическое число"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <csdlib>
using namespace std;
 
int main()
{
    int magic; // магическое число
    int guess; // догадка пользователя
 
    magic = rand(); // полчим случайное число
 
    cout << "Вводите вашу догадку: ";
    cin >> guess;
 
    if(guess == magic) cout << "** Правильно **";
 
    return 0;
}
Надеюсь чем-нибудь помог вам.
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.01.2012, 20:09     Как работает оператор if? #12
К словам rangerx, код
cpp
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main()
{
    int a = 5;
    if(a > 0)
        std::cout << "positive" << std::endl;
    else
        std::cout << "negative" << std::endl;
}
и куски из
asm
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
.LC0:
    .string "positive"
.LC1:
    .string "negative"
;...
    movl    $5, 28(%esp)
    cmpl    $0, 28(%esp)
    jle .L2
    movl    $.LC0, 4(%esp)
;...
.L2:
    movl    $.LC1, 4(%esp)
;...
Как комп понимает, что !(PI>8.35) - true??????
Он просто сравнивает 2 числа и в зависимости от результата либо "прыгает" по метке, либо нет.

Добавлено через 5 минут
Цитата Сообщение от csrnsdrfg Посмотреть сообщение
while (ch = getchar != EOF)
Может не getchar а getchar() все-таки?
TamTam
18 / 18 / 1
Регистрация: 28.12.2011
Сообщений: 176
10.01.2012, 20:52     Как работает оператор if? #13
экий вы въедливый) Дело в том, что язык си - это не машинный язык. Перед тем, как комп что-либо поймет все это ему переведут.
BRcr
4005 / 2294 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
10.01.2012, 21:03     Как работает оператор if? #14
Цитата Сообщение от csrnsdrfg Посмотреть сообщение
Почему нельзя писать так: while (ch = getchar != EOF) ...
Еще как можно
Просто правильно писать надо, а сообщениям компилятора внимать и делать выводы...
C++
1
2
3
4
5
bool ch;
while( ch = ( getchar( ) != EOF ) ){
  if( ch ) cout<< "true";
  else cout<< "false";
}
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
10.01.2012, 21:19     Как работает оператор if? #15
soon,

Не по теме:

Можете подсказать как/чем вы вытаскиваете asm-код?

kisssko
31 / 31 / 2
Регистрация: 19.12.2011
Сообщений: 72
10.01.2012, 21:26     Как работает оператор if? #16
csrnsdrfg, для начала следует учесть, что тернарный оператор ?: есть полный аналог конструкции if()else. Они полностью взаимозаменяемы. Вот теперь делаем выводы, что такое if.

if возвращает значение последнего выражения тела после if, либо после else, но никак не условие.

Добавлено через 3 минуты
Цитата Сообщение от soon Посмотреть сообщение
if(a > 0)
std::cout << "positive" << std::endl;
else std::cout << "negative" << std::endl;
А как давно ноль стал отрицательным числом?
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.01.2012, 21:28     Как работает оператор if? #17
Whiteha,
так
Bash
1
2
3
4
g++ main.cpp -o main.s -S
#Или
gcc main.c -o main.s -S
#~В зависимости от языка
kisssko
31 / 31 / 2
Регистрация: 19.12.2011
Сообщений: 72
10.01.2012, 21:29     Как работает оператор if? #18
Цитата Сообщение от Whiteha Посмотреть сообщение
soon,

Не по теме:

Можете подсказать как/чем вы вытаскиваете asm-код?

Отладчик в IDE. Visual Studio пользовались?
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.01.2012, 21:31     Как работает оператор if? #19
kisssko, никогда не был им. Ну, 0 никогда не был отрицательным. На скорую руку накидал. Суть то была показать, какой код получится в результате преобразования Си кода в asm, а именно работу команд j--.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2012, 21:34     Как работает оператор if?
Еще ссылки по теме:

Как работает оператор cout и return? C++
C++ Как работает оператор new, он же _Znwj на асме
C++ Не работает оператор |
C++ Поясните как работает постфиксный и префиксный оператор на примере
C++ Не работает оператор if

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kisssko
31 / 31 / 2
Регистрация: 19.12.2011
Сообщений: 72
10.01.2012, 21:34     Как работает оператор if? #20
soon,

Не по теме:

Ну ничего, бывает...

Yandex
Объявления
10.01.2012, 21:34     Как работает оператор if?
Ответ Создать тему
Опции темы

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