Additional bitwise arithmetic - Factor Documentation (original) (raw)

The math.bitwise vocabulary provides bitwise arithmetic words extending Bitwise arithmetic. They are useful for efficiency, low-level programming, and interfacing with C libraries.

Setting and clearing bits:

set-bit ( x n -- y )

clear-bit ( x n -- y )

Testing if bits are set:

bit? ( x n -- ? )

Extracting bits from an integer:

bit-range ( x high low -- y )

bits ( m n -- m' )

Toggling a bit:

toggle-bit ( m n -- m' )

Operations with bitmasks:

mask ( x n -- y )

unmask ( x n -- y )
mask? ( x n -- ? )
unmask? ( x n -- ? )

Generating an integer with n set bits:

on-bits ( m -- n )

Counting the number of set bits:

bit-count ( obj -- n )

Testing the parity of an object:

even-parity? ( obj -- ? )

odd-parity? ( obj -- ? )

More efficient modding by powers of two:

wrap ( m n -- m' )

Bit-rolling:

bitroll ( x s w -- y )

bitroll-32 ( m s -- n )
bitroll-64 ( m s -- n )

32-bit arithmetic:

w+ ( x y -- z )

w- ( x y -- z )
w* ( x y -- z )

64-bit arithmetic:

W+ ( x y -- z )

W- ( x y -- z )
W* ( x y -- z )

Words for taking larger integers apart into smaller integers:

d>w/w ( d -- w1 w2 )

w>h/h ( w -- h1 h2 )
h>b/b ( h -- b1 b2 )

Converting a number to the nearest even/odd/signed:

>even ( m -- n )

>odd ( m -- n )
>signed ( x n -- y )

Bitfields:
Constructing bit fields