2015-09-03 25 views
5

Bir kod C'den Lua'ya çevirmeye çalışıyorum ve bir sorunla karşılaşıyorum. Lua'da Bitsel AND'yi nasıl çevirebilirim? kaynak C kodu içerir:Lua'da "Bitwise AND" "

if ((komut & 0x80) == 0) ... Bu Lua yapılabilir Nasıl

? Ben Lua 5.1.4-8 kullanıyorum

İşte

+2

İnternette 'lua bitwise' veya 'lua bitwise operations' için arama yapmayı denediniz mi? Çünkü sana ihtiyacın olan cevabı bulmalılar. –

+0

Evet, yarım saat bekledim. Görüyorum ki, 5.2'de bitsel bir kütüphane eklenmişti, fakat bu kodu çalıştıracağım Router'ım, hala 5.1.4'ü çalıştırıyor ve bu da güncel olduğunu gösteriyor. – Fusseldieb

+1

Google (ve bing ve yahoo) arama sonuçlarındaki * ilk bağlantı *, ihtiyacınız olan bilgilere sahip olan http://lua-users.org/wiki/BitwiseOperators adresindedir. –

cevap

3

olan saf Lua 5.1 temel bir izole bitsel-ve uygulama:

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 

kullanımı:

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

Tekrar gönderdiğiniz için teşekkürler. – Fusseldieb

+0

Çok teşekkürler. Şimdi, aynı derecede clueless olduğum bir "Bitwise Left Shift" ile mücadele ediyorum. – Fusseldieb

+0

Bu iki işlenen bir LCD ekranı kontrol etmek için gereklidir. Şimdi yardıma ihtiyacım var :) – 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