--[[ 位操作 ]] --bit={data32={}} bit = bit or {} function bit.init32() bit.data32 = {} for i = 1, 32 do bit.data32[i] = 2 ^ (32 - i) end end bit.init32() function bit:d2b(arg) --bit:d2b local tr = {} for i = 1, 32 do if arg >= self.data32[i] then tr[i] = 1 arg = arg - self.data32[i] else tr[i] = 0 end end return tr end function bit:b2d(arg) --bit:b2d local nr = 0 for i = 1, 32 do if arg[i] == 1 then nr = nr + 2 ^ (32 - i) end end return nr end function bit:_xor(a, b) --bit:xor local op1 = self:d2b(a) local op2 = self:d2b(b) local r = {} for i = 1, 32 do if op1[i] == op2[i] then r[i] = 0 else r[i] = 1 end end return self:b2d(r) end function bit:_and(a, b) --bit:_and local op1 = self:d2b(a) local op2 = self:d2b(b) local r = {} for i = 1, 32 do if op1[i] == 1 and op2[i] == 1 then r[i] = 1 else r[i] = 0 end end return self:b2d(r) end function bit:_or(a, b) --bit:_or local op1 = self:d2b(a) local op2 = self:d2b(b) local r = {} for i = 1, 32 do if op1[i] == 1 or op2[i] == 1 then r[i] = 1 else r[i] = 0 end end return self:b2d(r) end function bit:_not(a) --bit:_not local op1 = self:d2b(a) local r = {} for i = 1, 32 do if op1[i] == 1 then r[i] = 0 else r[i] = 1 end end return self:b2d(r) end function bit:_rshift(a, n) --bit:_rshift local op1 = self:d2b(a) local r = self:d2b(0) if n < 32 and n > 0 then for i = 1, n do for i = 31, 1, -1 do op1[i + 1] = op1[i] end op1[1] = 0 end r = op1 end return self:b2d(r) end function bit:_lshift(a, n) --bit:_lshift local op1 = self:d2b(a) local r = self:d2b(0) if n < 32 and n > 0 then for i = 1, n do for i = 1, 31 do op1[i] = op1[i + 1] end op1[32] = 0 end r = op1 end return self:b2d(r) end function bit:print(ta) local sr = "" for i = 1, 32 do sr = sr .. ta[i] end -- print(sr) end