Умный дом

Оператор предшествования

Есть одна «заморочка» в использовании встроенных опера­торов - при комбинации нескольких операторов в одном выражении порядок выполнения операций определяется предустановленным уровнем приоритетности для каждого. Например, результат выражения 5 + 2*10 всегда равен 25 и никогда 70, поскольку оператор умножения имеет больший приоритет, чем оператор сложения. В итоге 2 всегда умножа­ется на 10 прежде, чем складывается с 5. ^

Мы можем переопределить приоритет, взяв в скобки опе­рацию, с выполнения которой хотели бы начать. (5 + 2) * 10, например, принимает значение 70.

Для операторов, о которых я говорил, предопределенные уровни приоритетности написаны ниже. Оператор, кото­рый выше, имеет больший приоритет, чем тот, что ниже. Операторы, расположенные в одну линию, имеют порядок определения слева направо.

Логическое NOT арифметическое (*, /, %) арифметическое(+, -) отношение (<, >, <=, >=) отношение (= =, !=) логическое AND логическое OR присваивание

Например, для определения четности ival мы можем на­писать:

! ival % 2 // не совсем хорошо

Наше выражение проверяет результат оператора остатка. Если ival четно, результат нулевой и логический оператор НЕ становится истинным. Иначе, если результат ненулевой, логический оператор НЕ принимает значение false. Во вся­ком случае, так нам хотелось бы.

К сожалению, результат выражения совершенно иной. Наше выражение всегда будет ложным, исключая значение ival, равное нулю!

Более высокий приоритет оператора логического отри­цания приводит к тому, что он выполняется первым, дей­ствуя на ival. Если ival имеет ненулевое значение, резуль­тат-ложный, в противном случае - истинный. Полученное значение становится левой частью операции получения остатка. False становится «О» при использовании в ариф­метических операциях, a true принимает значение «1». В результате порядка выполнения операций выражение превращается в 0%2 для любых значений ival за исключе­нием нуля.

Хотя мы не хотели получить данный результат, он не является ошибкой, по крайней мере, языковой ошибкой. Это лишь неправильное представление нашей задуманной программной логики. Компилятор об этом, конечно, не до­гадывается. Порядок выполнения - это одна из причин, зат­рудняющих программирование на С++. Для правильного выполнения выражения мы должны изменить порядок вы­полнения с помощью скобок:

! (ival % 2) // ok

Чтобы избежать этих проблем, необходимо поближе по­знакомиться с порядком следования операторов в С++. Я вам не помощник, в том смысле, что раздел не содержит ни пол­ного перечня операторов, ни полного представления поряд­ка следования операций - того, что я показал, должно хва­тить только для начала.

Умный дом

Вторая версия основной программы на языке С++

/****************^ * TOC o "1-3" h z Copyright (С) 2006 by Vladimir Gololobov * * vgololobov@yandex. ru * * * * This program is free software; you can redistribute it …

Циклы

Циклы выполняют выражения или блоки выражений до тех пор, пока выражение условия не становится истинным. Наша программа требует двух циклов (один вложен в дру­гой). Пока пользователь желает угадывать последовательно­сти: { …

Две полезные схемы

Первая схема относится к настенному выключателю, работа­ющему по протоколу XI0. Что полезного можно почерпнуть из этой схемы? Например, организацию сканирования сети и управления триаком. Схему я привожу, как она сохранилась …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия
+38 050 512 11 94 — гл. инженер-менеджер (продажи всего оборудования)

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@inbox.ru
msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Оперативная связь

Укажите свой телефон или адрес эл. почты — наш менеджер перезвонит Вам в удобное для Вас время.