shr( num, bits )

Shifts the bits of a number to the right.

The number.
The number of bits to shift.

The shr() function takes a number and a bit count, and returns the result of shifting the bits of the number to the right by that count.

Numbers in Pico-8 are stored using a 32-bit fixed point format, with 16 bits for the integer portion, 16 bits for the fractional portion, and a Two's Complement representation for negative and positive values. Bit shifting uses the entire number representation. (See examples below.)

shr() performs an "arithmetic shift," which means that the sign of the number is preserved. Arithmetic right shift preserves the highest bit while also shifting a copy of it to the right, which effectively preserves the sign in Two's Complement representation.

The alternative to arithmetic shift is "logical shift." See lshr().

Examples Edit

-- 8 = 0b00001000 binary
-- 1 = 0b00000001 binary
print(shr(8, 3))  -- 1
-- 1.000 = 0b0001.0000 binary
-- 0.125 = 0b0000.0010 binary
print(shr(1, 3))  -- 0.125
-- -1.000 = 0b1111111111111111.0 binary (two's complement)
-- -0.125 = 0b1111111111111111.111 binary
print(shr(-1,3))  -- -0.125

See also Edit