Propeller Manual

Table Of Contents
2: Spin Language Reference – Operators
Y := ~X + 25
The Sign-Extend 7 operator in this example extends the sign of the value, X in this case, from
bit 7 up to bit 31. A 32-bit signed integer is stored in twos-complement form and the most
significant bit (31) indicates the sign of the value (positive or negative). There may be times
where calculations on simple data result in byte-sized values that should be treated as a
signed integer in the range of -128 to +127. When you need to perform further calculations
with those byte-sized values, use the Sign-Extend 7 operator to convert the number into the
proper 32-bit signed integer form. In the above example, assume
X represents the value -20,
which in 8-bit twos-complement form is actually the value 236 (%11101100). The
~X portion
of the expression extends the sign bit from bit 7 all the way up to bit 31, converting the
number to the proper 32-bit twos-complement form of -20 (%11111111 11111111 11111111
11101100). Adding that sign-extended value to 25 results in 5, the intended result, whereas it
would have resulted in 261 without the proper sign extension.
The following is an example of the Post-Clear operator form.
Y := X~ + 2
The Post-Clear operator in this example clears the variable to 0 (all bits low) after providing
its current value for the next operation. In this example if
X started out as 5, X~ would provide
the current value for the expression (5 + 2) to be evaluated later, then would store 0 in
X. The
expression 5 + 2 is then evaluated and the result, 7, is stored into
Y. After this statement, X
equals 0 and
Y equals 7.
Since Sign-Extend 7 and Post-Clear are always assignment operators, the rules of
Intermediate Assignments apply to them (see page 147).
Sign-Extend 15 or Post-Set ‘
~~
This operator is a special, immediate operator that has a dual purpose depending on which
side of the variable it appears on. It can only be used in run-time variable expressions. The
Sign-Extend 15 form of the operator appears to the left of a variable and the Post-Set form
appears to the right of a variable.
The following is an example of the Sign-Extend 15 operator form:
Y := ~~X + 50
The Sign-Extend 15 operator in this example extends the sign of the value, X in this case,
from bit 15 up to bit 31. A 32-bit signed integer is stored in twos-complement form and the
most significant bit (31) indicates the sign of the value (positive or negative). There may be
Propeller Manual v1.1 · Page 157