2015-09-03 18 views
5

Tôi đang cố dịch mã từ C sang Lua và tôi đang gặp sự cố. Làm thế nào tôi có thể dịch bitwise AND trong Lua? Mã nguồn C chứa:"Bitwise AND" trong Lua

if ((lệnh & 0x80) == 0) ...

Làm thế nào điều này có thể được thực hiện trong Lua?

Tôi đang sử dụng Lua 5.1.4-8

+2

Bạn đã thử tìm kiếm trên internet cho 'lua bitwise và' hoặc 'lua bitwise operation' chưa? Bởi vì họ nên tìm cho bạn câu trả lời bạn cần. –

+0

Vâng, tôi đã rao giảng nửa giờ. Tôi thấy rằng một thư viện cho bitwise đã được thêm vào trong 5.2, nhưng Router của tôi, nơi tôi sẽ chạy mã này, vẫn chạy 5.1.4 và nó sais rằng nó là up-to-date. – Fusseldieb

+1

* Liên kết * đầu tiên * trên kết quả tìm kiếm Google (và bing và yahoo) của tôi là http://lua-users.org/wiki/BitwiseOperators có thông tin bạn cần. –

Trả lời

3

Đây là một cơ bản, cô lập Bitwise-và thực hiện trong tinh khiết Lua 5.1:

function bitand(a, b) 
    local result = 0 
    local bitval = 1 
    while a > 0 and b > 0 do 
     if a % 2 == 1 and b % 2 == 1 then -- test the rightmost bits 
      result = result + bitval  -- set the current bit 
     end 
     bitval = bitval * 2 -- shift left 
     a = math.floor(a/2) -- shift right 
     b = math.floor(b/2) 
    end 
    return result 
end 

sử dụng:

print(bitand(tonumber("1101", 2), tonumber("1001", 2))) -- prints 9 (1001) 
+0

Cảm ơn bạn đã đăng lại. – Fusseldieb

+0

Cảm ơn rất nhiều. Bây giờ tôi đang đấu tranh với một "Bitwise trái Shift" mà tôi đều không biết gì. – Fusseldieb

+0

Hai toán hạng này là cần thiết để điều khiển màn hình LCD. Bây giờ tôi là một nửa do sự giúp đỡ của bạn :) – Fusseldieb

3
OR, XOR, AND = 1, 3, 4 

function bitoper(a, b, oper) 
    local r, m, s = 0, 2^52 
    repeat 
     s,a,b = a+b+m, a%m, b%m 
     r,m = r + m*oper%(s-a-b), m/2 
    until m < 1 
    return r 
end 

print(bitoper(6,3,OR)) --> 7 
print(bitoper(6,3,XOR)) --> 5 
print(bitoper(6,3,AND)) --> 2