--- local: ---
For better compatibility with GNU Fortran and Sun Fortran, this compiler supports an option (-funsigned
) that enables the UNSIGNED
data type, constants, intrinsic functions, its use with intrinsic operations and SELECT CASE
, and C language interoperability.
UNSIGNED
typeUNSIGNED
is a numeric type with the same kinds as INTEGER
. It may appear as a type-spec in any context, including a type declaration statement, a type-decl in an array constructor or ALLOCATE
statement, IMPLICIT
, or a function statement's prefix.
UNSIGNED
constants are nonempty strings of decimal digits followed by the letter U
and optionally a kind suffix with an underscore.
UNSIGNED
operationsUNSIGNED
operands are accepted for unary negation (-
), the basic four binary arithmetic intrinsic operations +
, -
, *
, and /
, components in complex constructors, and for numeric relational operators. The power operator **
does not accept UNSIGNED
operands.
Mixed operations with other types are not allowed. Mixed operations with one UNSIGNED
operand and one BOZ literal constant operand are allowed. When the operands' kinds differ, the smaller operand is zero-extended to the size of the larger.
The arithmetic operations u+v
, -u
, u-v
, and u*v
are implemented modulo MAX(HUGE(u),HUGE(v))+1
; informally speaking, they always truncate their results, or are guaranteed to “wrap”.
UNSIGNED
intrinsic functionsUNSIGNED
operands are accepted as operands to, or may be returned as results from, several intrinsic procedures.
Bitwise operations:
NOT
IAND
, IOR
, IEOR
, IBCLR
, IBSET
, IBITS
, MERGE_BITS
BTEST
ISHFT
, ISHFTC
SHIFTA
, SHIFTL
, SHIFTR
TRANSFER
MVBITS
The existing unsigned comparisons BLT
, BLE
, BGE
, and BGT
.
The inquiries BIT_SIZE
, DIGITS
, HUGE
, and RANGE
.
Homogeneous MAX
and MIN
.
RANDOM_NUMBER
.
The intrinsic array functions:
MAXVAL
, MINVAL
SUM
, PRODUCT
IALL
, IANY
, IPARITY
DOT_PRODUCT
, MATMUL
All of the restructuring array transformational intrinsics: CSHIFT
, EOSHIFT
, PACK
, RESHAPE
, SPREAD
, TRANSPOSE
, and UNPACK
.
The location transformationals FINDLOC
, MAXLOC
, and MINLOC
.
There is a new SELECTED_UNSIGNED_KIND
intrinsic function; it happens to work identically to the existing SELECTED_INT_KIND
.
Two new intrinsic functions UMASKL
and UMASKR
work just like MASKL
and MASKR
, returning unsigned results instead of integers.
Conversions to UNSIGNED
, or between UNSIGNED
kinds, can be done via the new UINT
intrinsic. The UNSIGNED
intrinsic name is also supported as an alias.
Support for UNSIGNED
in the OUT_OF_RANGE
predicate remains to be implemented.
UNSIGNED
is allowed in SELECT CASE
, but not in DO
loop indices or limits, or an arithmetic IF
expression.
UNSIGNED
array indices are not allowed.
UNSIGNED
data may be used as data items in I/O statements, including list-directed and NAMELIST
I/O. Format-directed I/O may edit UNSIGNED
data with I
, G
, B
, O
, and Z
edit descriptors.
UNSIGNED
data map to type codes for C's unsigned
types in the type
member of a cdesc_t
descriptor in the ISO_Fortran_binding.h
header file.
New definitions (C_UNSIGNED
, C_UINT8_T
, &c.) were added to ISO_C_BINDING and new constants (UINT8
, UINT16
, &c.) to ISO_FORTRAN_ENV.