1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 7
|
|
1 | |
Как работает оператор if?10.01.2012, 19:18. Показов 4334. Ответов 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
|
10.01.2012, 19:18 | |
Ответы с готовыми решениями:
22
Как работает оператор new? Как работает тернарный оператор Как работает оператор char *? Как работает оператор typedef |
36 / 36 / 1
Регистрация: 12.10.2011
Сообщений: 333
|
|
10.01.2012, 19:34 | 2 |
А в чём проблема?
0
|
10.01.2012, 19:37 | 3 |
Потому, что if() без тела не отработает.
Точнее отработает, но вот так "if(3);", что никакой смысловой нагрузки не несет. А сам по себе if ничего не возвращает. С какой радости у вас while(if(3)) должно отработать?
0
|
18 / 18 / 2
Регистрация: 28.12.2011
Сообщений: 176
|
|
10.01.2012, 19:41 | 4 |
А что, если вы писали 5+3, то работало?)
После ифа должно быть выражение, истиность или ложность которого оно возвращает. если гдето раньше 3 присвоили true (хотя так вроде нельзя), то должно быть напр 3 = true, ну или 3 = 3. А 0 - false это общее обозначение. Так можно в алгоритмах писать, и может на ассемблерах каких. И где это у нас etc - true, никогда не встречалось, только 1 - true (система то двоичная, ничего другого и нет)
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
|
10.01.2012, 19:45 | 6 |
1) Оператор if ничего не возвращает, он всего лишь проверяет истинность условия.
2) Достаточно открыть любую книгу по ассемблеру и прочитать про команды условного перехода.
0
|
18 / 18 / 2
Регистрация: 28.12.2011
Сообщений: 176
|
|
10.01.2012, 19:47 | 7 |
проверяет, проверяет. не возвращает
0
|
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 7
|
|
10.01.2012, 19:49 [ТС] | 8 |
Да, спасибо. Третий пункт мой затуп. Можно теперь про if конкретно инфу получить?
0
|
18 / 18 / 2
Регистрация: 28.12.2011
Сообщений: 176
|
|
10.01.2012, 19:57 | 9 |
if ( выражение )
оператор_1; else оператор_2; часть else может и отсутствовать. Сначала вычисляется "выражение" в скобках; если оно истинно то выполняется оператор_1. Если "выражение" ложно, то оператор_1 пропускается, а выполняется оператор_2. Если на месте условно выполняемых операторов должна располагаться группа из нескольких операторов языка, то они заключаются в фигурные скобки - { }.
0
|
1 / 1 / 0
Регистрация: 09.01.2012
Сообщений: 7
|
|
10.01.2012, 20:02 [ТС] | 10 |
TamTam, я это все знаю.
Ты мне лучше скажи, как просходит само определение истинности? Как комп понимает, что !(PI>8.35) - true?????? Добавлено через 2 минуты По теме еще один вопрос... Почему нельзя писать так: while (ch = getchar != EOF) ... Операция сравнения имеет больший приоретет, чем присваивание. Я понимаю, что этим хитрожопно присваиваю значение 1 (в случае getchar () != [ctrl +z]) или 0 (в остальных случаях). Но все-таки, почему компилятор распознает это как ошибку?
0
|
36 / 36 / 1
Регистрация: 12.10.2011
Сообщений: 333
|
||||||
10.01.2012, 20:03 | 11 | |||||
Полная форма предложения if выглядит так:
if(выражение) предложение; else предложение; Общая форма с использованием блоков выглядит так: if(выражение) { последовательность предложений } else { последовательность предложений } Простой пример. Знаменитая программа "Магическое число"
0
|
10.01.2012, 20:09 | 12 | ||||||||||
К словам rangerx, код
cpp
asm
Добавлено через 5 минут Может не getchar а getchar() все-таки?
1
|
18 / 18 / 2
Регистрация: 28.12.2011
Сообщений: 176
|
|
10.01.2012, 20:52 | 13 |
экий вы въедливый) Дело в том, что язык си - это не машинный язык. Перед тем, как комп что-либо поймет все это ему переведут.
0
|
10.01.2012, 21:03 | 14 | |||||
Еще как можно
Просто правильно писать надо, а сообщениям компилятора внимать и делать выводы...
0
|
32 / 32 / 4
Регистрация: 19.12.2011
Сообщений: 72
|
|
10.01.2012, 21:26 | 16 |
csrnsdrfg, для начала следует учесть, что тернарный оператор ?: есть полный аналог конструкции if()else. Они полностью взаимозаменяемы. Вот теперь делаем выводы, что такое if.
if возвращает значение последнего выражения тела после if, либо после else, но никак не условие. Добавлено через 3 минуты А как давно ноль стал отрицательным числом?
0
|
32 / 32 / 4
Регистрация: 19.12.2011
Сообщений: 72
|
|
10.01.2012, 21:29 | 18 |
0
|
10.01.2012, 21:31 | 19 |
kisssko, никогда не был им. Ну, 0 никогда не был отрицательным. На скорую руку накидал. Суть то была показать, какой код получится в результате преобразования Си кода в asm, а именно работу команд j--.
0
|
32 / 32 / 4
Регистрация: 19.12.2011
Сообщений: 72
|
|
10.01.2012, 21:34 | 20 |
soon,
Не по теме: Ну ничего, бывает...
0
|
10.01.2012, 21:34 | |
10.01.2012, 21:34 | |
Помогаю со студенческими работами здесь
20
Как работает оператор switch? Как работает оператор new, он же _Znwj на асме Как работает оператор cout и return? Уточнение о том как работает оператор for Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |