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...