用Lua實現位運算

2021-06-26 23:37:59 字數 2273 閱讀 3961

由於做禮包啟用碼的時候需要對啟用碼進行一些位運算,所以就寫了這個模組。一般這些位運算操作建議還是在c++裡面寫,由於遊戲已經發出去了,只想用自動更新來更新這個功能,所以逼於無奈只能先用lua來實現一下。如果有朋友也是遇到不方便更新c++,只想用lua來實現的話,希望這裡可以幫到你。

module("common.bit", package.seeall)

local bitlen = 32

local function numbertobits(src)

local result = {}

for i = 1, bitlen do

result[i] = src % 2

src = math.floor(src / 2)

endreturn result

endlocal function bitstonumber(src)

local result = 0

for i = 1, bitlen do

if src[i] == 1 then

result = result + 2 ^ (i - 1)

endend

return result

endfunction setbitlen(len)

bitlen = len

endfunction getbitlen(len)

return bitlen

endfunction lsl(src, dst)

return src * 2 ^ dst

endfunction lsr(src, dst)

return math.floor(src / 2 ^ dst)

endfunction xor(src, dst)

local srcbit = numbertobits(src)

local dstbit = numbertobits(dst)

local result = {}

for i = 1, bitlen do

result[i] = (srcbit[i] == dstbit[i] and 0 or 1)

endreturn bitstonumber(result)

endfunction and(src, dst)

local srcbit = numbertobits(src)

local dstbit = numbertobits(dst)

local result = {}

for i = 1, bitlen do

result[i] = ((srcbit[i] == dstbit[i] and srcbit[i] == 1) and 1 or 0)

endreturn bitstonumber(result)

endfunction or(src, dst)

local srcbit = numbertobits(src)

local dstbit = numbertobits(dst)

local result = {}

for i = 1, bitlen do

result[i] = ((srcbit[i] == dstbit[i] and srcbit[i] == 0) and 0 or 1)

endreturn bitstonumber(result)

endfunction not(src)

local srcbit = numbertobits(src)

for i = 1, bitlen do

srcbit[i] = (srcbit[i] == 1 and 0 or 1 )

endreturn bitstonumber(srcbit)

endfunction hexstringtonumber(hexstring, isbigendian)

local result = ""

if not isbigendian then

local count = math.floor(string.len(hexstring) / 2)

while count > 0 do

local index = count * 2 - 1

result = result .. string.sub(hexstring, index, index + 1)

count = count - 1

endelse

result = hexstring

endreturn tonumber(result, 16)

end

用位運算實現除法

複習一下 被除數 除數 商.餘數累減 最簡單的就是不斷地用被除數減去除數,直到被除數小於除數,此時減的次數就是商 加權累減 假設現在要計算a b,a為a位的二進位制數,b為b位的二進位制數 1 將b左移a b位,變成乙個a位的二進位制數b 與a的位數一樣 2 如果a大於等於b 則令a a b 商累加...

lua中位運算操作

description filename bit.lua this module provides a selection of bitwise operations.history initial version created by 陣雨 2005 11 10.notes bit for i 1...

lua中的位運算

lua5.1不支援位操作 自己實現 數字轉二進位制 如下 其中需要注意的地方是 num num 2 並不像c中只得整數部分 所以需要處理一下值 用到了lua中math庫的math.modf 函式 函式用法如下所示 print math.modf 12.34 12 0.34數字轉二進位制 數字轉二進位...