lua를 사용해서 알고리즘을 만들다 보면, 불편한것 중에 하나가 비트연산이 없다는 것이다.
아래에 비트연산을 하기위한 패치 파일을 올린다.. 많은 도움이 되시길~~
이 패치파일은 필요에 따라서 약간의 커스터마이징(일부 연산자를 약간 수정했다)을 한 패치파일임을 밝혀둔다.
지원하는 연산자는 >>(RSHIFT), <<(LSHIFT) 그리고 |(OR), &(AND), ~(XOR) 이며,
meta처리를 위해,
__or, __and, __xor, __shl, __shr, __not
을 지원한다.
다음은 사용 샘플 예이다.
hex=function (i) return "0x"..string.format("%X", i) end
print(hex(0x54|0x55))
print(hex(0x54&0x66))
print(hex(0x54~0x66))
print(hex(~0x54))
print(hex(0xF<< 4))
print(hex(0xF0>> 4))
a,b=0x54,0x55
print(hex(a),"|",hex(b), "=",hex(a|b))
print(hex(a),"|","0x55", "=",hex(a|0x55))
print(hex(a),"|","0x5|0x50 (", hex(0x5|0x50), ") =",hex(a|(0x5|0x50)))
a,b=0x54,0x66
print(hex(a),"&",hex(b), "=",hex(a&b))
print(hex(a),"&","0x66", "=",hex(a&0x66))
print(hex(a),"~",hex(b), "=",hex(a~b))
print(hex(a),"~","0x66", "=",hex(a~0x66))
print("~"..hex(a),"=",hex(~a))
a,b=0xF,0xF0
print(hex(a).."<<4","=",hex(a<<4))
print(hex(b)..">>4","=",hex(b>>4))
a,b=0xF,4
print(hex(a).."<<"..b,"=",hex(a<<b))
a,b=0xF0,4
print(hex(a)..">>"..b,"=",hex(a>>b))
print(hex(0x54|0x55))
print(hex(0x54&0x66))
print(hex(0x54~0x66))
print(hex(~0x54))
print(hex(0xF<< 4))
print(hex(0xF0>> 4))
a,b=0x54,0x55
print(hex(a),"|",hex(b), "=",hex(a|b))
print(hex(a),"|","0x55", "=",hex(a|0x55))
print(hex(a),"|","0x5|0x50 (", hex(0x5|0x50), ") =",hex(a|(0x5|0x50)))
a,b=0x54,0x66
print(hex(a),"&",hex(b), "=",hex(a&b))
print(hex(a),"&","0x66", "=",hex(a&0x66))
print(hex(a),"~",hex(b), "=",hex(a~b))
print(hex(a),"~","0x66", "=",hex(a~0x66))
print("~"..hex(a),"=",hex(~a))
a,b=0xF,0xF0
print(hex(a).."<<4","=",hex(a<<4))
print(hex(b)..">>4","=",hex(b>>4))
a,b=0xF,4
print(hex(a).."<<"..b,"=",hex(a<<b))
a,b=0xF0,4
print(hex(a)..">>"..b,"=",hex(a>>b))