Lua程式設計 19

2021-09-03 08:12:16 字數 953 閱讀 3269

lua語言從5.3版本開始提供了對數值型別的一組標準位運算子(bitwise operator),這類運算子僅能作用於整形數。位運算子包括按位與,按位或,按位異或,邏輯右移,邏輯左移和一元運算子按位取反。

所有的位運算都針對構成乙個整形數的所有位,在標準lua中也就是64位。

特別要注意的lua語言與c語言不同的是,lua語言的兩個以為操作都會用0天聰空出的為,也就是邏輯移位,lua語言沒有提供算術右移的方法。

整形表示中使用乙個位元來儲存符號位,因此,64位整形數最大可以表示2^63-1而不是2^64-1。lua語言不顯示支援無符號整形數。

lua原因輸出常量的方式在預設情況下,列印數值時將其作為有符號整形數處理。可以使用選項%u或%x在函式string.format中指定以無符號整形數輸出。

關係運算對於有符號整形數和無符號整形數是不一樣的,對於有符號整形數而言,符號位被置位的整數更小,因為它代表的是負數。

因此,我們需要使用一種不同得操作來比較無符號整型數。lua5.3提供了math.ult來完成這個需求。

無符號除法和有符號除法也不一樣

function udiv (n, d)

if d < 0 then

if math.ult(n,d) then return 0

else return 1

endend

local q = ((n >> 1) // d << 1

local r = n - q * d

if not math.ult(r,d) then q = q + 1 end

return q

end

第乙個比較(d<0)等價於比較d是否大於2^63,如果大於那麼商只能是能是1(n大於等於d)或0.否則,我們是被除數除以二即右移一位,然後除以除數,再把結果乘以二。右移一位相當於除以2的無符號除法,其結果是乙個非負有符號整形數。後續的左移則糾正了商,還原了之前的除法。

LUA教程函式命名引數 19

lua的函式引數是和位置相關的,呼叫時實參會按順序依次傳給形參。有時候用名字指定引數是很有用的,比如rename函式用來給乙個檔案重新命名,有時候我們我們記不清命名前後兩個引數的順序了 invalid code rename old temp.lua new temp1.lua 上面這段 是無效的,...

Lua程式設計(三)

通過昨天用lua程式語言解決八皇后問題,我對於lua語言的程式編寫有了大致的了解。今天開始了解lua的數值相關概念。在lua5.3中為數值格式提供了兩種選擇 一種為64位的integer型別,另一種則是雙精度的float型別。如果是資源受限的平台,如微控制器等我們可以使用精簡的32位數值格式。lua...

Lua程式設計(四)

字串是用於表示文字的手段。lua語言提供的字串是由一串位元組組成的序列。每個字元用8個位元位來儲存。雖然lua支援用任意一種方法來儲存unicode字串,但是最好在一切可能的情況下優先使用utf 8編碼。需要注意的是lua中的字串是不可變值,不能直接修改字串中的某個字元,僅能通過建立乙個新的字串來達...