Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

10.01.2012, 19:18. Просмотров 3091. Ответов 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? Прошу серьезно отнестись к вопросу. Ответы типа: "проверяет истинность. Возвращает число" и т.п. не принимаются.
Хочу услышать разумный ответ. Комп не понимает операции "проверить истинность". КАК ПРОИСХОДИТ эта самая проверка? Желательно максимально подробно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2012, 19:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как работает оператор if? (C++):

Как работает оператор new? - C++
Обязательно ли использовать оператор delete в коде (см.ниже.).После использования оператора new старая область память выделенная для pStr...

Как работает оператор switch? - C++
Shape* generator() { switch(rand() % 3) { case 0: return new Triangle; case 1: return new Rectangle; case 2: return new...

Как работает оператор char *? - C++
Как работает оператор char *! Можете описать его принцип работы! Спасибо заранее!

Как работает оператор typedef - C++
как работает оператор typedef если есть у кого сам код то пришлите,интересно:)

Как работает тернарный оператор - C++
Здравствуйте. Объясните, пожалуйста, что значит эта строка color = (color == 'W') ? 'B' : 'W';

Как работает оператор new, он же _Znwj на асме - C++
Собственно как действительно он работает? То есть что реально происходит какие инструкции (грубо говоря) он выполняет? Откуда проц (в...

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

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

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

Не по теме:

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

Отладчик в IDE. Visual Studio пользовались?
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.01.2012, 21:31 #19
kisssko, никогда не был им. Ну, 0 никогда не был отрицательным. На скорую руку накидал. Суть то была показать, какой код получится в результате преобразования Си кода в asm, а именно работу команд j--.
0
kisssko
31 / 31 / 2
Регистрация: 19.12.2011
Сообщений: 72
10.01.2012, 21:34 #20
soon,

Не по теме:

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

0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.01.2012, 21:34 #21
Цитата Сообщение от kisssko Посмотреть сообщение
if возвращает значение последнего выражения
Еще раз. if ничего не возвращает.
0
kisssko
31 / 31 / 2
Регистрация: 19.12.2011
Сообщений: 72
10.01.2012, 22:31 #22
Цитата Сообщение от soon Посмотреть сообщение
Еще раз. if ничего не возвращает.
Да, действительно. Тут уже я напутал чуток.

Добавлено через 38 минут
Можно только тернарный оператор вместо if использовать(с некоторыми ограничениями), но не наоборот.
C
1
2
3
4
5
6
7
8
9
10
int main(int argc, char **argv)
{
    int   a=0;
    a?a--:a++; /* if(a)a--;else a++; */
    argc-1?
        puts("args")
        :
        puts("noargs");
    return 0;
}
0
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
11.01.2012, 05:05 #23
Цитата Сообщение от csrnsdrfg Посмотреть сообщение
Почему нельзя писать так: while (ch = getchar != EOF) ...
Цитата Сообщение от BRcr Посмотреть сообщение
Еще как можно
Просто правильно писать надо, а сообщениям компилятора внимать и делать выводы...
C++
1
2
3
4
5
bool ch;
while( ch = ( getchar( ) != EOF ) ){
  if( ch ) cout<< "true";
  else cout<< "false";
}
и еще и даже и не так можно
C++
1
2
3
4
char ch;
while( (ch = getchar()) != EOF ) ){
  cout<< ch << endl;
}
0
11.01.2012, 05:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2012, 05:05
Привет! Вот еще темы с ответами:

Уточнение о том как работает оператор for - C++
Я правильно понимаю? Оператор for, сперва будет работать только с первым выражением до тех пор, пока оно не станет ложным не переходя ко...

Как работает оператор cout и return? - C++
Допустим есть функция: int show() { int g = 5; cout &lt;&lt; (g&gt;7)?1:2; return g&gt;7?1:2; }return на выражение g&gt;7?1:2...

Поясните как работает постфиксный и префиксный оператор на примере - C++
Здравствуйте. Здесь префиксный понятно, а что если изменить на постфиксный, как код будет работать? vector&lt;int&gt;::size_type...

Не работает оператор if - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include &lt;math.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

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