由於做禮包啟用碼的時候需要對啟用碼進行一些位運算,所以就寫了這個模組。一般這些位運算操作建議還是在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數字轉二進位制 數字轉二進位...