Распространенные ошибки

Использование чисел, записанных в других системах счисления

Может показаться, что значения следующих двух переменных одинаковые:

Однако это совсем не так. Первое число (

123

) записано в десятичной системе счисления. Т.к. по умолчанию (и чаще всего) мы работаем с десятичной системой счисления, то

x

так и будет равен

123

.

Второе же число (

0123

) записано в восьмеричной системе счисления и при переводе в десятичную будет равно

83

, а не

123

. Если вы работаете с десятичной системой счисления, то не добавляйте цифру "0" перед числом.

Проверка на принадлежность значения определенному интервалу

Иногда при проверке принадлежности значения переменной определенному интервалу можно увидеть нечто подобное

Несмотря на кажущуюся логичность, этот код не проверяет на то, что

x

лежит между

0

и

10

.

Если разбить на шаги, то они будут следующими:

Т.к. оператор сравнения <= левоассоциативен (т.е., выполняется слева направо), то первым шагом будет сравнение

0

и

x

1.

0 <= x

. Результат сравнения -

true

или

false

, которые будут преобразованы в

1

или

0

соответственно.

2. сравниваем полученный результат с

10

.

10

больше и

1

, и

0

. Следовательно, условие всегда истинно.

В общем случае, можно сказать, что при сравнении подобным образом, если последнее число (в примере это число

10

) больше или равно

1

, то условие всегда истинно.

Проверку на принадлежность интервалу правильно записывать с помощью логического оператора И.

Ошибкой также является использование запятой, вместо логического

И

В этом случае, значения выражения

0 <= x

никак не используется. Результатом будет значение выражения

x <= 10

.

Иногда вместо логического

И

используют логическое

ИЛИ

.

Выражение

не означает, что значение

x

лежит между

0

и

10

. Это может быть вообще любое число. Почему так происходит:

1. Проверяем первое условие. Если

x

больше или равен нулю, то истина. Значит, любое положительное значение уже истина.

2. Если первое условие не выполнилось, то проверяем второе условие. Любое отрицательное число (а предыдущее условие могло не пройти только отрицательное значение) меньше

10

, значит, условие тоже истинное.

Следовательно, условие всегда истинное.