2015-09-03 12 views
5

Ich versuche, einen Code von C nach Lua zu übersetzen, und ich stehe vor einem Problem. Wie kann ich ein bitweises AND in Lua übersetzen? Die Quelle C-Code enthält:"Bitweises UND" in Lua

if ((Befehl & 0x80) == 0) ...

Wie dies in Lua kann getan werden?

Ich bin mit Lua 5.1.4-8

+2

Haben Sie versucht, im Internet nach "lua bitwise" und "lua bitwise operations" zu suchen? Weil sie die Antwort finden sollten, die Sie brauchen. –

+0

Ja, ich habe eine halbe Stunde gefoltert. Ich sehe, dass eine Bibliothek für bitweise in 5.2 hinzugefügt wurde, aber mein Router, wo ich diesen Code ausführen werde, läuft immer noch 5.1.4 und es ist, dass es aktuell ist. – Fusseldieb

+1

Der * allererste Link * in meinen Google- (und Bing- und Yahoo-) Suchergebnissen ist http://lua-users.org/wiki/BitwiseOperators, der die benötigten Informationen enthält. –

Antwort

3

Hier ist eine grundlegende, isoliert bitweise und Umsetzung in reinem 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 

Nutzung:

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

Danke für das erneute Posten. – Fusseldieb

+0

Vielen Dank. Jetzt kämpfe ich mit einem "Bitwise Left Shift", dem ich ebenso wenig ahnend bin. – Fusseldieb

+0

Diese beiden Operanden sind notwendig, um einen LCD-Bildschirm zu steuern. Jetzt bin ich auf halbem Weg wegen deiner Hilfe :) – 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