6.1.29 Битовые логические операторы
С помощью -fdec GNU Fortran ослабляет ограничения типов для логических операторов, позволяя использовать целочисленные операнды и выполняя соответствующую битовую операцию вместо неё. Этот флаг предназначен только для совместимости и следует избегать в новом коде. Рассмотрим:
INTEGER :: i, j i = z'33' j = z'cc' print *, i .AND. j
В этом примере, скомпилированном с помощью -fdec, GNU Fortran заменит операцию .AND. вызовом встроенной функции IAND, что даст битовую конъюнкцию i и j.
Обратите внимание, что это преобразование произойдёт, если хотя бы один операнд имеет целочисленный тип. В результате логический операнд будет преобразован в целое число, когда другой операнд является целым в логической операции. В этом случае, .TRUE. преобразуется в 1 и .FALSE. в 0.
Вот сопоставление логического оператора с битовой встроенной функцией, используемой с -fdec:
| Оператор | Встроенная функция | Битовая операция |
|---|---|---|
.NOT. |
NOT |
дополнение |
.AND. |
IAND |
пересечение |
.OR. |
IOR |
объединение |
.NEQV. |
IEOR |
исключающее или |
.EQV. |
NOT(IEOR) |
дополнение от исключающего или |
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gfortran/Bitwise-logical-operators.html