Shift Operators

As well as these operators to change individual bits, WMLScript also provides shift operators, which allow you to move all the bits in an integer left or right. Because of the way integers are represented, these can be used to multiply or divide integers by a power of two.

Shift right has two operators, >> and >>>. The difference between these two is that >> handles negative numbers properly, so you can always use it to do division by powers of two. On the other hand, >>> treats all numbers as unsigned, even though all integers in WMLScript are signed, and because of this it doesn’t work as you’d expect for negative numbers. It’s most often used, like the &, |, and ^ operators, when you use an integer just to store 32 separate bits, rather than a standard integer.

Shift left is represented by the << operator. It works for all numbers without requiring two operators.

All these shift operators require both their operands to be integers. In addition, the right operand (the number of places to shift) can’t be negative. (This last condition isn’t specified explicitly by the WMLScript specification, but different interpreters handle negative shift counts inconsistently.)

For example:

10 << 3 gives 80 (equivalent to 10 * 2 * 2 * 2)
10 >> 3 gives 1 (equivalent to 10 div 2 div 2 div 2)
10 >>> 3 gives 1 (>> and >>> work the same for positive numbers)
-10 << 3 gives -80 (equivalent to -10 * 2 * 2 * 2)
-10 >> 3 gives -1 (equivalent to -10 div 2 div 2 div 2)
-10 >>> 3 gives 536870911 ...

Get Learning WML, and WMLScript now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.