По крайней мере, в современных Delphi , and
имеет более высокий приоритет, чем =
, поэтому
a = 0 and b = 0
интерпретируется как
(a = (0 and b)) = 0.
НоОператор and
не может принимать целое число и значение с плавающей точкой в качестве операндов (хотя два целых числа были бы в порядке).Следовательно, ошибка.
Если бы a
и b
были целыми числами, 0 and b
был бы побитовым соединением 0
и b
, то есть 0
.Таким образом, у нас было бы
(a = 0) = 0.
Это читается либо true = 0
(если a
равно 0
), либо false = 0
(если a
отличается от 0
).Но логическое значение нельзя сравнить с целым числом, поэтому компилятор жаловался бы на это.
Тем не менее, это было только академическое упражнение.Очевидно, ваше намерение было
(a = 0) and (b = 0).
Просто добавьте скобки:
if (b = 0) and (a = 0) then
writeln('INFINITY')