123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- local root = {data32 = {}}
- for i = 1, 32 do
- root.data32[i] = 2 ^ (32 - i)
- end
- -- 数字转2进制
- function root:d2b(arg)
- 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
- -- 2进制转数字
- function root:b2d(arg)
- local nr = 0
- for i = 1, 32 do
- if arg[i] == 1 then
- nr = nr + 2 ^ (32 - i)
- end
- end
- return nr
- end
- function root:_xor(a, b)
- 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 --root:xor
- function root:_and(a, b)
- 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 --root:_and
- function root:_or(a, b)
- 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 --root:_or
- function root:_not(a)
- 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 --root:_not
- function root:_rshift(a, n)
- 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 --root:_rshift
- function root:_lshift(a, n)
- 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 --root:_lshift
- function root:print(ta)
- local sr = ""
- for i = 1, 32 do
- sr = sr .. ta[i]
- end
- end
- return root
|