www.delorie.com/gnu/docs/gforth/gforth_29.html search
Gforth Manual

 [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ]

## 3.17 Flags and Comparisons

In a false-flag all bits are clear (0 when interpreted as integer). In a canonical true-flag all bits are set (-1 as a twos-complement signed integer); in many contexts (e.g., `if`) any non-zero value is treated as true flag.

 ```false . true . true hex u. decimal ```

Comparison words produce canonical flags:

 ```1 1 = . 1 0= . 0 1 < . 0 0 < . -1 1 u< . \ type error, u< interprets -1 as large unsigned number -1 1 < . ```

Gforth supports all combinations of the prefixes `0 u d d0 du f f0` (or none) and the comparisons `= <> < > <= >=`. Only a part of these combinations are standard (for details see the standard, 5.5.4 Numeric comparison, 5.5.6 Floating Point or Word Index).

You can use `and or xor invert` can be used as operations on canonical flags. Actually they are bitwise operations:

 ```1 2 and . 1 2 or . 1 3 xor . 1 invert . ```

You can convert a zero/non-zero flag into a canonical flag with `0<>` (and complement it on the way with `0=`).

 ```1 0= . 1 0<> . ```

You can use the all-bits-set feature of canonical flags and the bitwise operation of the Boolean operations to avoid `if`s:

 ```: foo ( n1 -- n2 ) 0= if 14 else 0 endif ; 0 foo . 1 foo . : foo ( n1 -- n2 ) 0= 14 and ; 0 foo . 1 foo . ```

Assignment:
Write `min` without `if`.

For reference, see 5.4 Boolean Flags, 5.5.4 Numeric comparison, and 5.5.3 Bitwise operations.

 webmaster delorie software   privacy Copyright © 2003   by The Free Software Foundation Updated Jun 2003