Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Functions for quick left and right bitwise shifts in Lua.
function lshift(x, by)
return x * 2 ^ by
end
function rshift(x, by)
return math.floor(x / 2 ^ by)
end
@blackknight36

This comment has been minimized.

Copy link

commented Feb 9, 2019

There seems to be a bug in the rshift function as defined here. Shifting a value of 0x01 twice should result in a value of 0 while shifting a value of 0x03 twice should result in a value of 1. Lua will return 0 for both of these operations as shown below.

> print(math.floor(0x01/2^2))
0
> print(math.floor(0x03/2^2))
0

Using the math.round function defined at http://lua-users.org/wiki/SimpleRound appears to fix this however.

> print(math.round(0x01/2^2))
0
> print(math.round(0x03/2^2))
1

I haven't tested the results with larger numbers but for simply 8 bit integer operations this appears to be enough.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.