beautypg.com

A.6.2 arithmetic operators, A.6.3 bitwise operators – Campbell Scientific CR800 and CR850 Measurement and Control Systems User Manual

Page 471

background image

Appendix A. CRBasic Programming Instructions

471

 

A.6.2 Arithmetic Operators

Table 112. Arithmetic Operators

Symbol Name

Notes

^

Raise to power

Result is always promoted to a float

(p. 142)

to avoid problems that

may occur when raising an integer to a negative power. However,
loss of precision occurs if result is > 24 bits.
For example:
(46340 ^ 2) will yield 2,147,395,584 (not precisely correct)
whereas,
(46340 * 46340) will yield 2,147,395,600 (precisely correct)
Simply use repeated multiplications instead of ^ operators when
full 32-bit precision is required.
Same functionality as PWR()

(p. 475)

instruction.

*

Multiply

/

Divide Use

INTDV()

(p. 475)

to retain 32-bit precision

+

Add

-

Subtract

=

Equal to

<>

Not equal to

>

Greater than

<

Less than

>=

Greater than or
equal to

<=

Less than or
equal to

 

A.6.3 Bitwise Operators

Bitwise shift operators (<< and >>) allow the program to manipulate the positions
of patterns of bits within an integer (CRBasic Long type). Here are some example
expressions and the expected results:

&B00000001 << 1 produces &B00000010 (decimal 2)
&B00000010 << 1 produces &B00000100 (decimal 4)
&B11000011 << 1 produces &B10000110 (decimal 134)
&B00000011 << 2 produces &B00001100 (decimal 12)
&B00001100 >> 2 produces &B00000011 (decimal 3)

The result of these operators is the value of the left hand operand with all of its
bits moved by the specified number of positions. The resulting "holes" are filled
with zeroes.

Consider a sensor or protocol that produces an integer value that is a composite of
various "packed" fields. This approach is quite common to conserve bandwidth
and/or storage space. Consider the following example of an eight-byte value:

• bits 7-6: value_1