4.5 无符号整数
Fortran 编译器接受新的数据类型 UNSIGNED 作为对该语言的一种扩展。UNSIGNED 接受四个 KIND 参数值: 1、2、4 和 8,分别对应于 1、2、4 和 8 字节无符号整数。
无符号整型常量的形式是:数字串后跟大写或小写字母 U,再后跟一个下划线和种类参数(可选)。下面的示例显示了无符号整型常量的最大值:255u_1
65535u_2
4294967295U_4
18446744073709551615U_8
如果没有使用种类参数 (12345U),则缺省值与缺省整数相同。缺省值为 U_4,但可以使用 -xtypemap 选项更改它,这会更改缺省无符号整数的种类类型。
可使用 UNSIGNED 类型说明符声明无符号整型变量或数组:UNSIGNED U
UNSIGNED(KIND=2) :: A
UNSIGNED*8 :: B
4.5.1 算术表达式二进制运算(如 + - * /)不能混合使用有符号操作数和无符号操作数。即,如果将 U 声明为 UNSIGNED 并且 N 是有符号的 INTEGER,则 U*N 是非法的。可使用 UNSIGNED 内部函数将二进制运算中的混合操作数组合起来,例如 U*UNSIGNED(N)。
有一种例外情况是,如果一个操作数是无符号整数,而另一个操作数是具有正值或零值的有符号整数常量表达式,则结果是无符号整数。
此类混合表达式的结果的类型,是操作数最常见的类型。
有符号值的幂是有符号的值;而无符号值的幂是无符号的值。
无符号值的一元负值是无符号的值。
无符号操作数可以与实数、复数操作数任意混合使用。(无符号操作数不能与区间操作数混合使用。)
4.5.2 关系表达式
可以使用内部关系运算来比较有符号和无符号整型操作数。其结果基于未修改的操作数的值。
4.5.3 控制构造CASE 构造接受无符号整数作为条件表达式。
不允许将无符号整数作为 DO 循环控制变量,也不允许在算术 IF 控制表达式中使用它。
4.5.4 输入/输出构造可以使用 I、B、O 和 Z 编辑描述符来读取和写入无符号整数。
还可以使用列表控制和名称列表 I/O 读取和写入无符号整数。无符号整数在列表控制或名称列表 I/O 下的写入格式与用于带符号正整数的格式相同。
也可以使用未格式化 I/O 读取或写入无符号整数。
4.5.5 内部函数允许在内部函数中使用无符号整数,但 SIGN 和 ABS 除外。
新的内部函数 UNSIGNED 与 INT 类似,但生成无符号类型的结果。格式为
UNSIGNED(v [,kind] )。
另一个新的内部函数 SELECTED_UNSIGNED_KIND( var) 返回 var 的种类参数。
内部函数不允许同时使用有符号整型操作数和无符号整型操作数,但 MAX 和 MIN 函数除外。仅当至少有一个 REAL 类型的操作数时,才允许这两个函数同时使用有符号整型操作数和无符号整型操作数。
无符号数组不能作为数组内部函数的参数。