lua二進位制操作函式

2022-03-04 20:57:50 字數 1946 閱讀 2300

由於 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

lua 二進位制函式使用

由於 lua 指令碼語言本身不支援對數字的二進位制操作 例如 與,或,非 等操作 mushclient 為此提供了一套專門用於二進位制操作的函式,它們都定義在乙個 bit 表中,使用時只要requre bit 即可。bit.ashr 帶符號的按位右移 此函式需要兩個整數作為引數。第乙個引數可以帶有符...

二進位制操作

關於二進位制操作很常見,很多筆試面試題中也有涉及,本篇主要圍繞二進位制翻轉,二進位制最高位判定和給定整數的二進位制輸出來 靈活使用二進位制的 操作。一 給定整數的二進位制翻轉 思路 可以考慮逐次翻轉得到最終的翻轉結果,具體做法,首先將所有二進位制位奇偶位逐個翻轉,然後以兩位為一對 作為整體 奇偶對逐...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...