1. 程式人生 > >lua 二進位制函式使用

lua 二進位制函式使用

由於 Lua 指令碼語言本身不支援對數字的二進位制操作(例如 與,或,非 等操作),MUSHclient 為此提供了一套專門用於二進位制操作的函式,它們都定義在一個“bit”表中,使用時只要requre “bit”即可。

bit.ashr - 帶符號的按位右移

  此函式需要兩個整數作為引數。第一個引數可以帶有符號,是被以為的數,第二個引數是一個無符號整數,是向右移動的位數。在以為過程中,第一個引數的符合始終會被保留。

  例如:

  print (bit.ashr (-1024, 6)) --> -16

bit.band - 按位“與”運算

  此函式需要一個或多個無符號整數作為引數,返回所有引數執行按位“與”運算後的結果。

  bit.band(a,b)即是a 和 b的按位與;

  例如:

  print (bit.band (18, 2)) --> 2

  print (bit.band (15, 7, 3)) --> 3

  print (bit.band (17, 10, 4)) --> 0

  bit.band(a,b,c)是a b c的互相按位與;

bit.bor - 按位“或”運算

  此函式需要一個或多個無符號整數作為引數,返回所有引數執行按位“或”運算後的結果。

  例如:

  print (bit.bor (1, 2, 8)) --> 11

bit.mod - 取模函式 (得到整除後的餘數)

  此函式需要兩個整數作為引數。函式結果是兩個數整除之後的餘數。

  例如:

  print(bit.mod (17, 4)) --> 1

bit.neg - 按位“非”運算

  此函式需要一個無符號整數作為引數,返回這個引數執行按位“非”運算後的結果。

  例如:

  print (bit.neg (1)) --> 4294967294

bit.shl - 按位左移

  此函式需要兩個無符號整數作為引數。第一個引數是被移位的數,第二個引數是向左移動的位數。

  例如:

  print (bit.shl (4, 6)) --> 256

bit.shr - 按位右移

  此函式需要兩個無符號整數作為引數。第一個引數是被移位的數,第二個引數是向右移動的位數。

  例如:

  print (bit.shr (1024, 6)) --> 16

bit.tostring (n, base) - 把一個數字轉換為字串

  把一個數字根據指定的基數轉換為字串(大寫形式)base 產生是可選的,預設為 10,其有效範圍為 2 - 36。數字的小數部分會被忽略. 被轉換的數字可以是負數,轉換後會保留 "-" 符號。

  例如:

  print (bit.tostring (45035996273, 16)) --> A7C5AC471

bit.tonumber (s, base) - 把字串轉換為一個數字

  把一個字串形式的數字轉換為相應的數字。和標準 Lua tonumber 函式不一樣的是此函式可以處理高達 52 bit 的數字(Lua 預設的函式只能處理 32 bit 的數字)。

  例如:

  print (bit.tonumber ("A7C5AC471", 16)) --> 45035996273

  base 引數是可選的,指明瞭轉換的基數,預設為 10。base 的有效範圍是 2 - 36。此函式不支援小數,也不支援指數表示形式的整數(例如 10.24e15)。如果一定要使用這樣的數,你只有使用 Lua 自帶的 tonumber 函數了。

  由於計算機對浮點數的限制,字串能轉換的數字不能超過 52 bit,例如:十六進位制 FFFFFFFFFFFFF (十進位制 4503599627370495)。

  字串開始的空白字元會自動被忽略,實際數字前面可以有一個 + 或者 - 號。

bit.xor - 按位“異或”運算

  此函式需要一個或多個無符號整數作為引數,返回所有引數執行按位“異或”運算後的結果。

  例如:

  print (bit.xor (15, 1)) --> 14