Lua 位运算

Lua5.1 自己实现位运算

local function BitOR(a,b)--Bitwise or
    local p,c=1,0
    while a+b>0 do
        local ra,rb=a%2,b%2
        if ra+rb>0 then c=c+p end
        a,b,p=(a-ra)/2,(b-rb)/2,p*2
    end
    return c
end

local function BitNOT(n)
    local p,c=1,0
    while n>0 do
        local r=n%2
        if r<1 then c=c+p end
        n,p=(n-r)/2,p*2
    end
    return c
end

local function BitAND(a,b)--Bitwise and
    local p,c=1,0
    while a>0 and b>0 do
        local ra,rb=a%2,b%2
        if ra+rb>1 then c=c+p end
        a,b,p=(a-ra)/2,(b-rb)/2,p*2
    end
    return c
end

代码来自 https://stackoverflow.com/questions/5977654/lua-bitwise-logical-operations
@Trey Reynolds


lua不同版本的位操作

5.1 使用外部bitlib库(需要bitlib.dll)

命令行范例

Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> require "bit"
> a=12
> b=9
> print(bit.band(a,b))
8
> print(bit.bor(a,b))
13
> print(bit.bxor(a,b))
5
> print(bit.bnot(a))
-13
> print(bit.rshift(a,2))
3
> print(bit.lshift(b,3))
72

5.2 使用内置bit32库

命令行范例

Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> require "bit32"
> a=12
> b=9
> print(bit32.band(a,b))
8
> print(bit32.bor(a,b))
13
> print(bit32.bxor(a,b))
5
> print(bit32.bnot(a))
4294967283
> print(bit32.rshift(a,2))
3
> print(bit32.lshift(b,3))
72
> =bit32.lshift(b,3)
72

5.3 使用内置操作符

命令行范例

Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio
> a=12
> b=9
> a & b
8
> a | b
13
> a ~ b
5
> ~ a
-13
> a >> 2
3
> b << 3
72

转载自 http://www.ituring.com.cn/article/272421

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值