Go to main content
Oracle® Developer Studio 12.6: Fortran User's Guide

Exit Print View

Updated: July 2017
 
 

4.2 Data Types

This section describes features and extensions to the Fortran data types.

4.2.1 Boolean Type

f95 supports constants and expressions of Boolean type. However, there are no Boolean variables or arrays, and there is no Boolean type statement.

4.2.1.1 Rules Governing Boolean Type

  • For masking operations, a bitwise logical expression has a Boolean result; each of its bits is the result of one or more logical operations on the corresponding bits of the operands.

  • For binary arithmetic operators, and for relational operators:

    • If one operand is Boolean, the operation is performed with no conversion.

    • If both operands are Boolean, the operation is performed as if they were integers.

  • No user-specified function can generate a Boolean result, although some (nonstandard) intrinsics can.

  • Boolean and logical types differ as follows:

    • Variables, arrays, and functions can be of logical type, but they cannot be Boolean type.

    • There is a LOGICAL statement, but no BOOLEAN statement.

    • A logical variable, constant, or expression represents only two values, .TRUE. or .FALSE. A Boolean variable, constant, or expression can represent any binary value.

    • Logical entities are invalid in arithmetic, relational, or bitwise logical expressions. Boolean entities are valid in all three.

4.2.1.2 Alternate Forms of Boolean Constants

f95 allows a Boolean constant (octal, hexadecimal, or Hollerith) in the following alternate forms (no binary). Variables cannot be declared Boolean. Standard Fortran does not allow these forms.

Octal

ddddddB, where d is any octal digit

  • You can use the letter B or b.

  • There can be 1 to 11 octal digits (0 through 7).

  • 11 octal digits represent a full 32-bit word, with the leftmost digit allowed to be 0, 1, 2, or 3.

  • Each octal digit specifies three bit values.

  • The last (right most) digit specifies the content of the right most three bit positions (bits 29, 30, and 31).

  • If less than 11 digits are present, the value is right-justified—it represents the right most bits of a word: bits n through 31. The other bits are 0.

  • Blanks are ignored.

Within an I/O format specification, the letter B indicates binary digits; elsewhere it indicates octal digits.

Hexadecimal

X’ddd or X"ddd", where d is any hexadecimal digit

  • There can be 1 to 8 hexadecimal digits (0 through 9, A-F).

  • Any of the letters can be uppercase or lowercase (X, x, A-F, a-f).

  • The digits must be enclosed in either apostrophes or quotes.

  • Blanks are ignored.

  • The hexadecimal digits may be preceded by a + or - sign.

  • 8 hexadecimal digits represent a full 32-bit word and the binary equivalents correspond to the contents of each bit position in the 32-bit word.

  • If less than 8 digits are present, the value is right-justified—it represents the right most bits of a word: bits n through 31. The other bits are 0.

Hollerith

Accepted forms for Hollerith data are:

nH
’H
""H
nL
’L
""L
nR
’R
""R

Above, “…” is a string of characters and n is the character count.

  • A Hollerith constant is type Boolean.

  • If any character constant is in a bitwise logical expression, the expression is evaluated as Hollerith.

  • A Hollerith constant can have 1 to 4 characters.

Examples: Octal and hexadecimal constants.

Boolean Constant
Internal Octal for 32-bit Word
0B
00000000000
77740B
00000077740
X"ABE"
00000005276
X"-340"
37777776300
X’1 2 3’
00000000443
X’FFFFFFFFFFFFFFFF’
37777777777

Examples: Octal and hexadecimal in assignment statements.

i = 1357B
j = X"28FF"
k = X’-5A’

Use of an octal or hexadecimal constant in an arithmetic expression can produce undefined results and do not generate syntax errors.

4.2.1.3 Alternate Contexts of Boolean Constants

f95 allows BOZ constants in the places other than DATA statements.

Bbbb
Oooo
Zzzz
B"bbb"
O"ooo"
Z"zzz"

If these are assigned to a real variable, no type conversion occurs.

Standard Fortran allows these only in DATA statements.

4.2.2 Abbreviated Size Notation for Numeric Data Types

f95 allows the following nonstandard type declaration forms in declaration statements, function statements, and IMPLICIT statements. The form in column one is nonstandard Fortran, though in common use. The kind numbers in column two can vary by vendor.

Table 28  Size Notation for Numeric Data Types
Nonstandard
Declarator
Short Form
Meaning
INTEGER*1
INTEGER(KIND=1)
INTEGER(1)
One-byte signed integers
INTEGER*2
INTEGER(KIND=2)
INTEGER(2)
Two-byte signed integers
INTEGER*4
INTEGER(KIND=4)
INTEGER(4)
Four-byte signed integers
LOGICAL*1
LOGICAL(KIND=1)
LOGICAL(1)
One-byte logicals
LOGICAL*2
LOGICAL(KIND=2)
LOGICAL(2)
Two-byte logicals
LOGICAL*4
LOGICAL(KIND=4)
LOGICAL(4)
Four-byte logicals
REAL*4
REAL(KIND=4)
REAL(4)
IEEE single-precision four-byte floating-point
REAL*8
REAL(KIND=8)
REAL(8)
IEEE double-precision eight-byte floating-point
REAL*16
REAL(KIND=16)
REAL(16)
IEEE quad-precision sixteen-byte floating-point
COMPLEX*8
COMPLEX(KIND=4)
COMPLEX(4)
Single-precision complex (four bytes each part)
COMPLEX*16
COMPLEX(KIND=8)
COMPLEX(8)
Double-precision complex (eight bytes each part)
COMPLEX*32
COMPLEX(KIND=16)
COMPLEX(16)
Quad-precision complex (sixteen bytes each part)

4.2.3 Size and Alignment of Data Types

Storage and alignment are always given in bytes. Values that can fit into a single byte are byte-aligned.

The size and alignment of types depends on various compiler options and platforms, and how variables are declared. The default maximum alignment in COMMON blocks is to 4-byte boundaries.

Default data alignment and storage allocation can be changed by compiling with special options, such as -aligncommon, -f, -dalign, -dbl_align_all,- xmemalign,, and- xtypemap. The default descriptions in this manual assume that these options are not in force.

The following table summarizes the default size and alignment, ignoring other aspects of types and options.

Table 29  Default Data Sizes and Alignments (in Bytes)
Fortran Data Type
Size
DefaultAlignment
Alignment inCOMMON
BYTE X
CHARACTER X
CHARACTER*n X
1
1
n
1
1
1
1
1
1
COMPLEX X
COMPLEX*8 X
DOUBLE COMPLEX X
COMPLEX*16 X
COMPLEX*32 X
8
8
16
16
32
4
4
8
8
8/16
4
4
4
4
4
DOUBLE PRECISION X
REAL X
REAL*4 X
REAL*8 X
REAL*16 X
8
4
4
8
16
8
4
4
8
8/16
4
4
4
4
4
INTEGER X
INTEGER*2 X
INTEGER*4 X
INTEGER*8 X
4
2
4
8
4
2
4
8
4
2
4
4
LOGICAL X
LOGICAL*1 X
LOGICAL*2 X
LOGICAL*4 X
LOGICAL*8 X
4
1
2
4
8
4
1
2
4
8
4
1
2
4
4

Note the following:

  • REAL*16 and COMPLEX*32: in 64-bit environments (compiling with -m64) the default alignment is on 16-byte (rather than 8-byte) boundaries, as indicated by 8/16 in the table. This data type is often referred to as quad precision.

  • Arrays and structures align according to their elements or fields. An array aligns the same as the array element. A structure aligns the same as the field with the widest alignment.

Options -f or -dalign force alignment of all 8, 16, or 32-byte data onto 8-byte boundaries. Option -dbl_align_all causes all data to be aligned on 8-byte boundaries. Programs that depend on the use of these options may not be portable.