2の補数表現では、増加関数として数が増えてゆきますが、ある大きさまで達すると周期境界条件の様に、負の側の絶対値最大の数に飛んでまた増加してゆきます。
ここでは4バイト整数を扱いますので まで増加したところで、 へ飛びます。正の最大値と負の最小値の絶対値がずれています。この非対称性がまれに問題になることがあります。
負数は最上位ビットが1になっているので符号ビットとみなすことも出来ます。
PROGRAM int IMPLICIT NONE INTEGER :: i, k DO i = 0, 32 k = 2 ** i PRINT '(i4, i15, 4x, b32.32)', i, k, k END DO ! PRINT * PRINT '(6x, a, 8x, a, 20x, a)', 'INTEGER', 'HEX', 'BINARY' k = '1111111111111111111111111111111'B ! 7FFF FFFF PRINT '(i15, 4x, z8.8, 4x, b32.32)', k, k, k k = k + 1 PRINT '(i15, 4x, z8.8, 4x, b32.32)', k, k, k ! PRINT * k = '11111111111111111111111111111111'B ! FFFF FFFF PRINT '(i15, 4x, z8.8, 4x, b32.32)', k, k, k k = k + 1 PRINT '(i15, 4x, z8.8, 4x, b32.32)', k, k, k STOP END PROGRAM int