[an error occurred while processing this directive]
.сс
.шп6
20 Еще о клавиатуре, циклах и функциях
.шп0
В этой главе мы изучим хронометрированные тесты нажатий клавиш. Мы будем считывать данные в массив с помощью циклов и познакомимся с VAL и STR¤.
В предыдущих главах мы использовали GET или GET¤, ожидая нажатия клавиши. Мы также использовали TIME для замера задержки. Все эти команды можно скомбинировать в одну.
.шп14
20.1 INKEY
.шп0
Внутрение часы компьютера измеряют в сотых долях секунды, поэтому задержка 200 представляет собой паузу в две секунды.
.шп1
x := INKEY(n) - это указание ожидать нажатие клавиши в течение n сотых секунды. Если клавиша нажимается то х присваивается его код ASCII: иначе х присваивается -1.
.шп0
Введите new и
10 MODE := 6 20 FOR go := 1 TO 20 30 PRINT TAB( 6,8);"Press a key" 40 answer := INKEY (200) 50 IF answer = -1 THEN 60 PRINT TAB( 25,8);"Too slow" 70 ELSE 80 PRINT TAW( 25,8);"Code ";answer 90 END IF 100 x := INKEY (100) // to see comment 110 CLS 120 NEXT go 230 PRINT ''"Program complete"
Запустите программу, проверяя быструю и медленную реакцию.
Нажмите РЕД чтобы выйти из программы и просмотреть ее.
.шп14
20.2 INKEY¤
.шп1
x¤ := INKEY¤ - указание ждать нажатия клавиши в течение n сотых секунды. Если клавиша нажимается, то x¤ присваивается символ этой клавиши: в противном сучае x¤ присваивается нулевая строка.
.шп0
Измените следующие строки так, чтобы можно было использовать INKEY¤. Изменения подчеркнуты.
40 anwer¤ := INKEY¤ (200) --- -- 50 IF answer¤ = "" THEN -- -- 80 PRINT TAB( 25,8);answer¤ ------- 100 x¤ := INKEY¤ (100) // to see comment -- --
Запустите программу снова, чтобы посмотреть действие INKEY¤.
.шп14
20.3 Клавиши без кодов ASCII
.шп0
На клавиатуре имеется несколько клавиш, которые не возвращают коды ASCII. Например, клавиши со стрелками или функциональные клавиши. Как нам проверить нажата одна из этих клавиш, или нет?
Каждая клавиша имеет свой номер сканирования клавиатуры, который мы можем использовать для того, чтобы проверить какая именно клавиша была нажата. Этот номер уникален для клавиатуры Агата.
.шп14
20.4 INKEY минус
.шп1
INKEY(-n) является функцией,, которая проверяет была ли нажата клавиша с номером сканирования клавиатуры n. При этом задержка не используется. если клавиша нажимается во время проверки, то дается величина TRUE(-1), в других сучаях получается FALSE(0).
.шп0
Мы можем использовать номер сканирования клавиатуры для проверки не только нормальных клавиш, но и специальных.
Введите new и затем
10 mode := 6 20 print ''"Press the RETURN kej" 30 delay := inkey(100) // pause for title 40 repeat 50 test := inkey(-74) 60 print test 70 until time<0 // loop fr ever
Нажмите несколко раз клавишу ВВОД во время работы программы.
Нажмите клавишу РЕД, просмотрите ее, уничтожьте строки 20 и 30 и измените строку 50
50 test := inkey(-99)
Опять запустите программу и попробуйте найти, которая клавиша имеет номер 99.
.шп14
20.5 Коды сканирования клавиатуры на ПЭВМ АГАТ
.шп0
На следующих рисунках приведены шестнадцатиричные коды сканирования клавиатуры:
╔══╦══╦══╦══╦══╦══╦══╦══╦══╦══╦══╦══╦═══╦══╦══╗ ╔══╦══╦══╗ |A8|CF|CE|EE|ED|EC|CB|DB|EA|D9|D8|E8|ПВТ|C6|8F| |8E|8D|8C| ╚╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦══╬══╬══╣ ╠══╬══╬══╣ |BA|AD|CA|B9|DD|AA|AC|C7|A7|9E|AB|B7|E6|D6|86| |EB|8B|8A| ╚╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩═╦╝ ╠══╬══╬══╣ |BC|BB|DE|BE|C8|CC|C9|A9|CD|9C|87|98|LT| B6| |E9|89|88| ╚╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩═╦═╝ ╠══╬══╬══╣ |EF|E7|AE|9A|DA|DC|BD|9B|B8|99|97|D7|РЕГ| |DF|A6|96| ╚══╩══╬══╩══╩══╩══╩══╩══╩══╩══╬══╩══╩═══╝ ╠══╬══╬══╣ | 9D | |f1|f2|f3| ╚═══════════════════════╝ ╚══╩══╩══╝
╔══╦══╦══╦══╦══╦══╦══╦══╦══╦══╦══╦══╦═══╦══╦══╗ ╔══╦══╦══╗ | ;| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -|ПВТ| ↑|РД| | 1| 2| 3| ╚╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦══╬══╬══╣ ╠══╬══╬══╣ | J| C| U| K| E| N| G| [| ]| Z| H| :| ←| ↓| →| | 4| 5| 6| ╚╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩═╦╝ ╠══╬══╬══╣ | F| Y| W| A| P| R| O| L| D| V| \| .|LT| ↵ | | 7| 8| 9| ╚╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩╦═╩═╦═╝ ╠══╬══╬══╣ | Q| ^| S| M| I| T| X| B| @| ,| /| _|РЕГ| | 0| .| =| ╚══╩══╬══╩══╩══╩══╩══╩══╩══╩══╬══╩══╩═══╝ ╠══╬══╬══╣ | | |F1|F2|F3| ╚═══════════════════════╝ ╚══╩══╩══╝
.шп14
20.7 Пример программы
.шп0
Введите INKEY 'минус' программу.
100 // Movement 110 // 120 MODE := 4 130 initialise 140 REPEAT 150 test_key 160 test_off_screen 170 show_star 180 UNTIL FALSE 190 // 1000 PROC initialise 1010 across := 19 // Star Mid Screen 1020 down := 15 1030 VDU 23,1,,0;0;0;0; // Cursor off 1040 Left := -26 // Inkeys values 1050 right := -122 1060 up := -58 1070 back := -42 // down already used 1080 END PROK initialise 1090 // 1200 PROC test_off_screen 1210 // if off sides then swap 1220 IF across < 0 THEN across := 39 1230 IF across >39 THEN across := 0 1240 // if off top/bottom then swap 1250 IF down <0 THEN down := 29 1260 IF down >29 THEN down := 0 1280 END PROC test_off_scren 1290 // 1300 PROC show_star 1310 PRINT TAB( acros,down);"*" 1320 FOR delay := 1 TO 28 DO 1330 NULL // slow our speed 1340 NEXT delay 1350 // Now wipe off 1360 PRINT TAB( across,down);"" 1380 END PROC show_star 1390 // 1400 END //Change mode to get cursor Сейчас запустите программу, используя клавиши со стрелками, чтобы переместить звездочку.
.шп14
20.8 Использование процедур
.шп0
Программу, приведенную выше, можно было составить и без процедур. Ясно видно, что проще разбивать идею на мелкие этапы, а затем с помощью процедур программировать каждый этап.
Если основная программа уже продумана, можно отдельно писать каждую процедуру. Фактически одну программу могут писать несколько человек, составляя отдельные процедуры, а затем соединяя их.
Со временем вы можете накопить библиотеку полезных процедур и вставлять их в составляемые программы.
Считается, что составление программ таким образом занимает в два раза меньше времени, а устранение ошибок - в десять раз меньше.
Программы, написанные с использованием процедур, выглядят несколько длинными. Но если логика программы понятна и можно проследить, как работают процедуры, это не является недостатком.
В более коротких программах, которые трудно понять, очень трудно исправлять ошибки и их почти невозможно приспособить для других целей.
.шп14
20.9 Вложенные циклы
.шп0
Введите new и следующую программу.
10 MODE :=6 20 FOR j:=1 TO 15 DO 30 FOR k:= 1 TO 5 DO 40 PRINT TAB( j,k);"*" 50 delay:=INKEY (10) // to slow down 60 NEXT k 70 NEXT j
Запустите программу.
Внутренний цикл выполняется в первую очередь
Просмотрите программу.
Обратите внимание, что звездочки напечатаны как серия колонок.
Внутренний цикл выполняется полностью и будет выполняться каждый раз, когда внешний цикл увеличивается на 1.
Измените строку 40 на
40 print tab(k,j);"*"
И запустите ее.
В этот раз первыми печатаются ряды.
.шп2
Перепутанные циклы.
.шп0
FOR и NEXT k находятся внутри FOR и NEXT j. Если вы перепутаете переменные цикла, то при запуске программы вы получите набор сообщений об ошибках. Попробуйте поменять местами j и к вводом
60 NEXT j 70 NEXT k
Запустите программу.
Программу можно исправить вводом
60 NEXT 70 NEXT
Переменные будут вставлены правильно.
Введите new и следующий массив
10 DIM arrays(3,5) 20 MODE := 6 30 FOR j:= 1 TO 5 DO 40 FOR k := 1 TO 3 DO 50 READ array(k,j) 60 PRINT TAB( k,j);array(k,j) 70 delay:= INKEY (10) // slow down 80 NEXT k 90 NEXT j 100 DATA 1,1,1,2,2,2,3,3,3,4,4,4,5,5,5
Запустите программу и просмотрите ее.
Сейчас измените строку 60 на
60 PRINT TAB( j,k);array(k<j)
и опять запустите программу.
.шп14
20.10 Подбор индексов и переменных.
.шп0
Измените 10 на
10 DIM array(5,3)
и попытайтесь запустить опять.
Возникает ошибка. Это происходит, потому что второй индекс неможет быть выше 3, а мы пытаемся использовать величины 4 и 5. Если мы хотим считать данные в массив, то нужно тщательно подобрать "форму" массива к формам цикла.
.шп14
20.11 VAL
.шп0
Ранее было сказано, что со строками производить вычисления невозможно. Однако у нас имеется функция, которая может оценить подходящую строку.
.шп1
VAL - это функция, возвращающая величину, которую может произвести строка, если она математическое выражение.
.шп0
Введите прямую команду
this¤ := "2 * x + 3"
this¤ - это строка, но она похожа на математическое вычисление. Если бы мы знали величину х, то мы могли бы вычислить this¤.
Введите
х := 4
затем
rpint val(this¤)
VAL берет строку, названную this¤ и пытается вычислить ее величины, как будто бы это нормальное вычисление.
Введите
that¤ := "len nonsense"
и
print val(that¤)
.шп1
Если строка бессмыслена как укахзание вычисления, ее VAL (величину) найти невозможно.
.шп0
Строка может содержать цифры, напр. reply¤ := "123"
VAL можно использовать для получения цифрового эквивалента, 123.
Введите new и затем
10 MODE := 6 20 FOR question = 1 TO 6 30 INPUT "Enter some figure > ":reply¤ 40 PRINT 'reply¤,VAL(reply¤)' 50 NEXT question
Запустите программу.
Обратите внимание, что reply¤ печатается слева от своей зоны, потому что это строка, тогда как val(reply¤) печатается справа от своей зоны, потому что это число.
Запустите программу, используя ряд цифр и включив несколько с десятичными позициями.
.шп14
20.12 STR¤
.шп0
Имеется функция перевода числовых элементов в строки.
.шп1
STR¤ - это функция, которая берет числовой элемент как аргумент и возвращает строку с таким же внешнем видом.
.шп0
Измените 30 на
30 INPUT "Enter a number > ":reply
и 40 на
40 PRINT 'reply,STR¤ (reply)'
Просмотрите программу.
Числовая переменная reply будет напечатана справа от своей зоны, а ее строковая величина будет напечатана слева от следующей зоны.
Запустите программу, используя интегральные и действительными величинами с десятичными позициями.
.шп14
20.13 Итоговые упражнения
.шп0
Запишите ваши ответы и сверьте их с ответами в главе 43.
1. Какие команды будут иметь следующий эффект?
а) Ожидание нажатия клавиши в течение 1 секунды и присвоение символа этой клавиши а¤.
б) Ожидание нажатия клавиши до 2 секунд и присвоение кода ASCII этой клавиши B.
в) Проверка, нажимается ли клавиша С и печать -1, если она нажимается.
2. Что неправильно в следующей программе?
10 FOR j := 1 TO 5 DO 20 FOR k := -5 TO 1 DO 30 PRINT j*j - k*k 40 NEXT j 50 NEXT k
3. Если х := 2 и d¤ := "3 * 4 + x", каким будет VAL(d¤)?
4. Если y := 5.678, каким будет результат команды print len(str¤(y))
.шп14
20.14 Выводы.
.шп0
1. INKEY¤(n) является функцией, которая ожидает нажатия клавиши в течение n сотых секунды. Если клавиша нажата, то она немедленно возвращает символ. Если ничего не нажимается, то возвращается нулевая строка.
2. INKEY(n) является функцией, которая ожидает нажатия клавиши в течение n сотых секунды. Если клавиша нажата, то немедленно возвращается код ASCII. Если клавиша не нажимается, то возвращается -1.
3. INKEY(-n) является функцией, которая проверяет, нажимается ли клавиша с кодом сканирования n . Возвращаются величины: -1 для истинной, и 0 для ложной.
4. VAL является функцией, которая переводит строчный аргумент, как выражение, введенное с клавиатуры.
5. STR¤ является функцией, которая возвращает строчное выражение, являющееся эквивалентом ее цифрового аргумента.
.сс
.шп6
21 Логические операторы
.шп0
В этой главе мы расширим область применения условий в структурах IF и циклах REPEAT. Мы будем использовать логические операторы OR, AND, EOR и NOT.
FALSE (в значении 0) обычно появляется в заглавных буквах, однако TRUE (в значении -1) и true (любая целая кроме 0) будут различаться соответственным использованием заглавных или строчных букв.
.шп14
21.1 OR (или)
.шп0
В секции, описывающей цикл REPEAT UNTIL..., мы помещали условие в конце цикла. Если условие удовлетворяется, то цикл заканчивается. Иногда требуется закончить цикл, когда удовлетворяется одно или другое условие.
.шп1
Логический оператор OR используется для получения true (истиннго) или FALSE (ложного) результата после проверки двух условий. Если одно или (OR) другое условие верное, то результат тоже верный.
.шп0
Введите new и
10 goes := 0 20 actual := 0 30 MODE := 6 40 PRINT TAB( 0,5);"Guess my number, 1 to 9" 50 // 60 REPEAT 70 INRUT "Your gess ":guess 80 goes :+ 1 90 UNTIL guess = actual OR goes = 3 100 // 110 IF guess = actual THEN 120 PRINT ''"Correct" 130 ELSE 140 PRINT ''"It was ";actual 150 END IF
Запустите программу несколько раз.
Логический оператор OR также можно использовать с проверкой IF, когда должно удовлетворяться одно или другое условие (или оба).
.шп14
21.2 AND (и)
.шп0
Может потребоваться закончить цикл, когда удовлетворяется оба условия: и одно и другое. Таким же образом оператор IF может основываться на удовлетворении одного и друго условия.
.шп1
Логический оператор AND используется для проверки двух условий. Если оба условия верны, то возвращается TRUE. Если какое-либо из условий является ложным, то возвращается FALSE.
.шп0
Измените следующие строки на
90 until GUESS = ACTUAL or GOES = 6 110 if GUESS = ACTUAL and GOES < 3 then print "EcxellenT" 120 if GUESS = ACTUAL and GOES > 2 and GOES < 5 then rpint "gOOD" 130 if GUESS = ACTUAL and GOES > 4 then print "Slow" 140 if GUESS <> ACTUAL then print "Hard luck"
и уничтожьте строку 150.
.шп14
21.3 EOR
.шп1
Логический оператор EOR (Exclusiv OR - исключающее ИЛИ) может быть использован для проверки верности одного или другого (но не обоих) условия, а не обих.
.шп0
В следующей программе мы будем печатать звездочку, если ряд меньше 12 или (OR), если колонка меньше 19, но если удовлетворяются не оба условия.
Введите new и
10 MODE := 6 20 FOR down := 0 TO 23 DO 30 FOR across := 0 TO 39 DO 40 IF down < 12 EOR across < 19 THEN PRINT TAB( across,down);"*" 50 NEXT across 60 NEXT down
Запустите программу.
.шп14
21.4 Таблицы истинности
.шп0
Мы можем показать результаты операторов OR,AND,EOR в таблицах, где Т обозначает TRUE (истинная), а F - FALSE (ложная).
Например: если оператор 1 является Т (TRUE), а оператор 2 - F )FALSE)
то T OR F дает результат Т(RUE) T AND F дает результат F(ALSE) T EOR F дает результат T(RUE) |Операнд 2 | OR | T F ═════════════════════╬══════════ | Операнд 1 T | T T | F | T F |Операнд 2 | AND | T F | ═════════════════════╬══════════ | Операнд 1 T | T F | F | F F |Операнд 2 | EOR | T F ═════════════════════╬═══════════ | | Операнд 1 T | F T | | T F
.шп14
21.5 Логические операторы
.шп0
OR, AND, EOR - это все 'логические операторы'. Они реализуются в Комале как операции, выполняемые в двоичных числах (нули и еденицы). Это означает, что можно делать указания следующего вида
PRINT 1 OR 2 PRINT 2 AND 1 PRINT 2 EOR 3
Каждая двоичная цифра одного числа сравнивается с соответствующей цифрой другого в соответствии с правилами OR, AND и EOR. Затем в надлежащем месте возвращаемой величины используется 1 или 0.
В качестве примера, использующего две бинарные цифры, посмотрим работу оператора OR.
1 OR 3 возвратит величину 3. Для каждой колонки делаются сравнения и, если в одной из них есть 1, то 1 затем используется в колонке результата.
Бинарные цифры число (основание 10) Колонки величин 2 1 ----------------------------- 1 0 1 OR 3 1 1 ------------------------------ Результат 3 1 1
Бинарное число 11 (десятичное 3) возвращается операцией 1 OR 3.
Если величина, возвращенная оператором OR равна 0, то она представляет ложное условие. Любая другая (целая) величина представляет истинное условие.
Логический оператор AND в результате даст 1, если в соответствующих позициях обоих аргументов есть 1.
Бинарные цифры Число (основание 10) Коллонки величин 2 1 --------------------------------------------- 2 1 0 AND 1 0 1 ---------------------------------------------- Результат 0 0 0
Бинарное число 00 (десятичное 0) возвращается операцией 2 AND 1.
Оператор EOR дает 1 только, если в одной или другой соответствующей позиции аргумента, но не в двух, имеется 1.
Бинарные цифры Число (основание 10) Колонки величин 2 1 ----------------------------------------------- 2 1 0 EOR 3 1 1 ------------------------------------------------ Результат 1 0 1
Бинарное число 01 (десятичное 1) возвращается операцией 2 EOR 3.
.шп14
21.6 NOT
.шп0
Ключевое слово NOT инвертирует величины TRUE и FALSE.
Введите
PRINT NOT TRUE
и
PRINT NOT FALSE
.шп1
NOT - это оператор, который инвертирует истинные и ложные беличины.
NOT FALSE, т.е. NOT (не) 0, производит -1 или истинную величину.
NOT TRUE,т.е NOT -1, производит 0 или ложную величину.
.шп14
21.7 Что является истинным.
.шп0
Необходимо быть осторожным со всеми величинами кроме -1 и 0.
NOT обычно применяется к значениям 0 и -1, хотя, строго говоря, он инвертирует каждую бинарную цифру, превращая единицы в нули и наоборот.
NOT - это оператор с наиболее высоким приоритетом. Он выполняется прежде операторов OR, AND, EOR.
Введите прямую команду
PRINT NOT 5
Компьютер считает, что любая величина, не равная нулю представляет истинное условие. Например, ни 5, ни -6 не являются ложными, поэтому они оба представляют условие, которое будет восприниматься как истинное.
Введите new и следующую программу.
10 MODE := 6 20 PRINT TAB( 5,5);"Press any number key" 30 REPEAT 40 x¤ := GET¤ 50 UNTIL x¤ IN "1234567890" 60 PRINT x¤'"Finished"
Эта программа ожидает номер клавиши, которая должна быть нажата.
Запустите ее, чтобы доказать, что это так.
Когда нажимается клавиша с символом, функция х¤ IN "1234567890" производит числа от 1 до 10, т.е. позицию, на которой в строке находится символ. Так как величина не равна нулю, она воспринимается как означающая истинное условие и цикл завершается.
Измените строку 50 на
50 UNTIL NOT (x¤ IN "1234567890")
Скобки здесь необходимы для того, чтобы IN исполнялось раньше NOT. NOT не имеет действия на строку. Сейчас запустите программу и нажмите клавишу 5.
Как x¤ IN "1234567890", так и NOT (x¤ IN "1234567890") производят величину, не равную нулю. Поэтому обе они представляют условие, заканчивающее цикл.
Если мы хотим исключить ряд символов, то необхлдимо проверять точное условие. Измените 50 на
50 UNTIL x¤ IN "1234567890" <> 0
Будьте осторожны с NOT!
.шп14
21.8 Усечение до целых
.шп0
Все числа, используемые в логических тестах перед проверкой усекаются, например:
NOT 0.1 - это то же, что и NOT 0, T.E. -1 или истинное.
.шп14
21.9 Предшествование операторов
.шп0
Когда необходимо интерпретировать 'логическое' условие, между операторами NOT, AND, OR, EOR должен быть порядок предшествования. Это логический эквивалент предшествования, используемого в арифметике с * и +.
NOT имеет наивысшое предшествование.
AND имеет более высокое предшествование, чем OR и EOR.
OR и EOR имеют самое низкое предшестврвание.
Если OR или EOR встречаются в одном выражении, то они выполняются в том порядке, в котором они встречаются.
Пример:
2<3 EOR 3<4 AND 5<4
воспринимается как
2<3 EOR ( 3<4 AND 5<4)
то есть
TRUE EOR FALSE и возвращает TRUE
тогда как
( 2<3 EOR 3<4) AND 5<4
то есть
FALSE AND FALSE возвращает FALSE.
Полная таблица предшествования дана в секции 40.6.
.шп14
21.10 Итоговые упражнения
.шп0
Что возвращают следующие операторы, TRUE или FALSE?
1. 2 < 3 OR 3 < 4 2. 2 < 3 EOR 3 < 4 3. 2 < 3 AND 3 < 4 4. 3 > 2 OR 3 > 4 5. 3 > 2 EOR 3 > 4 6. 3 > 2 AND 3 > 4 7. NOT (2 < 3) 8. NOT (2 = 3)
Какие числа представляются
9. NOT 0 10. NOT -1 11. NOT 1
Ответы даны в главе 43, но их тоже можно проверить, приказав компьютеру командой PRINT (напечатать) приведенные в вопросах операторы.
.шп14
21.11 Выводы.
.шп0
1. Любое нецелое число усекается до целого прежде, чем оно используется логическим оператором.
2. FALSE имеет величину 0, а TRUE имеет величину -1, хотя любая целая величина, которая не равна нулю рассматривается как величина, представляющая истинное условие. Любое условие, не являющееся ложным, считается истинным. Обратное положение не принимается.
3. OR можно использовать для возвращения true или FALSE как результата двух условий. Если одно или другое условие истинное, то результат тоже истинный. Это включает случай, когда оба условия истинные. Только если оба условия ложные, результат тоже будет ложным.
4. EOR (Исключающий OR) может быть использован для возвращенния true или FALSE как результата двух условий. Это вид теста OR, но исключает случай, когда оба условия истинные. Если оба условия истинные, то результат ложный. Если оба условия ложные, то результат ложный.
5. AND можно использовать для возвращения true или FALSE как результата двух условий. Если оба условия истинные, то результат истинный.
6. NOT инвертирует TRUE и FALSE. Любая целая величина кроме -1 (представляющей условие, которое воспринимается как истинное) производит неравную нулю величину (тоже представляющую истинное условие). NOT - один из операторов наивысшего приоритета.
7. Более точно, OR, AND, EOR, NOT производят логические операции с аргументами в бинарном представлении.
.ст комал11
[an error occurred while processing this directive]