This article applies to:

E-Prime 3.0

E-Prime 2.0

This item was introduced in E-Prime 2.0 (2.0.8.42).

Detail

This feature provides for manipulating numeric values in E-Basic through bitwise operations. Due to restrictions of the E-Basic language, precision loss may be incurred if attempting bitwise acts via the '*', '/', 'AND', 'OR', or 'XOR' operators. Consider mitigating this with the following functions:

LShift([value], [number of bits to shift left])

RShift([value], [number of bits to shift right])

BitwiseAnd([value], [mask])

For further information on scripting using E-Basic, please refer to the E-Prime Command Reference (https://pstnet.com/ecr).

## Comments

1 comment

EP2 also includes the following bitwise functions:

BitwiseOr

BitwiseXor

BitwiseNot

which work as expected.

Note that LShift may produce an overflow error under some conditions. E.g.,

Dim x0 As Integer, x1 As Integer

x0 = &h4000

x1 = LShift( x0, 1 )

will produce an overflow error (instead of the expected &h8000) because the LShift operation here produces a Long value. You may avoid that in a couple of ways:

Dim xLng As Long

xLng = LShift( x0, 1 )

this will simply produce the Long value, fine as long as that works for your application;

x1 = LShift( BitwiseAnd(x0, &h3FFF), 1) Or IIf( (x0 < &h4000), 0, &h8000)

this is a kludge that I came up with; or,

x1 = CInt("&h" & Hex(LShift(x0, 1)))

due to David Nicholson at PST Support, which I like better.

Please sign in to leave a comment.