lua中的位運算

2021-09-13 12:02:07 字數 3193 閱讀 3250

lua5.1不支援位操作 自己實現

--數字轉二進位制 **如下 其中需要注意的地方是 num = num / 2 並不像c中只得整數部分 所以需要處理一下值 用到了lua中math庫的math.modf()函式 函式用法如下所示

print(math.modf(12.34))  ---》 12  0.34
數字轉二進位制**

--數字轉二進位制

function tosecond(num)

local str = ""

local tmp = num

while (tmp > 0) do

if (tmp % 2 == 1) then

str = str .. "1"

else

str = str .. "0"

endtmp = math.modf(tmp / 2)

endstr = string.reverse(str)

return str

end

接下來的位運算 按位或 按位與 按位取反 由於各個數字轉為二進位制後的長度不一定一樣長 所以首先需要將要比較的兩個數字先轉為二進位制 並且為他們補齊長度 **如下

--先補齊兩個數字的二進位制位數

function makesamelength(num1, num2)

local str1 = tosecond(num1)

local str2 = tosecond(num2)

local len1 = string.len(str1)

local len2 = string.len(str2)

print("len1 = " .. len1)

print("len2 = " .. len2)

local len = 0

local x = 0

if (len1 > len2) then

x = len1 - len2

for i = 1, x do

str2 = "0" .. str2

endlen = len1

print("len = "..len)

elseif (len2 > len1) then

x = len2 - len1

for i = 1, x do

str1 = "0" .. str1

endlen = len2

endlen = len1

return str1, str2, len

end

按位或**

--按位或 	

function bitor(num1, num2)

local str1, str2, len = makesamelength(num1, num2)

local rtmp = ""

for i = 1, len do

local st1 = tonumber(string.sub(str1, i, i))

local st2 = tonumber(string.sub(str2, i, i))

if(st1 ~= 0) then

rtmp = rtmp .. "1"

elseif (st1 == 0) then

print("00000")

if (st2 == 0) then

rtmp = rtmp .. "0"

endend

endrtmp = tostring(rtmp)

return rtmp

end

按位與

--按位與

function bitand(num1, num2)

local str1, str2, len = makesamelength(num1, num2)

local rtmp = ""

for i = 1, len do

local st1 = tonumber(string.sub(str1, i, i))

local st2 = tonumber(string.sub(str2, i, i))

if(st1 == 0) then

rtmp = rtmp .. "0"

else

if (st2 ~= 0) then

rtmp = rtmp .. "1"

else

rtmp = rtmp .. "0"

endend

endrtmp = tostring(rtmp)

return rtmp

end

按位異或

--按位異或

function bityior(num1, num2)

local str1, str2, len = makesamelength(num1, num2)

local rtmp = ""

for i = 1, len do

local st1 = tonumber(string.sub(str1, i, i))

local st2 = tonumber(string.sub(str2, i, i))

if (st1 ~= st2) then

rtmp = rtmp .. "1"

else

rtmp = rtmp .. "0"

endend

rtmp = tostring(rtmp)

return rtmp

end

按位取反

--取反

function negate(num)

local str = tosecond(num)

local len = string.len(str)

local rtmp = ""

for i = 1, len do

local st = tonumber(string.sub(str, i, i))

if (st == 1) then

rtmp = rtmp .. "0"

elseif (st == 0) then

rtmp = rtmp .. "1"

endend

rtmp = tostring(rtmp)

return rtmp

end

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實現位運算

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

lua中的運算子

在學習一門語言的時候,運算子也是一項必要的單元,在用lua寫成的 中,必定會用到運算子,現在就lua的運算子做一下總結 運算子一般分為算術運算子,關係運算子和邏輯運算子,連線運算子 算術運算子 二元運算子 加減乘除冪 一元運算子 負值 這些運算子的運算元都是實數 關係運算子 這些操作符返回結果為fa...