• lua 位运算


    bit = {data32={}}
    
    for i = 1, 32 do
        bit.data32[i] = 2^(32-i)
    end
    
    function bit:d2b( arg )
        local num = tonumber( arg )
        local tr = {}
        
        if num ~= nil then
            print("num = "..num)
            if num >= 0 then
                for i = 1, 32 do 
                    if num >= bit.data32[i] then
                       num = num - bit.data32[i]
                       tr[i] = 1
                    else
                       tr[i] = 0
                    end
                end
                return tr
            else
                return tr                        
            end                                
        else 
            return tr    
        end        
    end
    
    function judge0or1( arg )
        if arg == nil then
            return 0
        end
        
        for i = 1, #arg do
            if arg[i] ~= 0 or arg[i] ~= 1 then
                return 0
            end
        end
        
        return 1
    end
    
    function bit:b2d( arg )
        local num = 0
        
        if arg ~= nil then
            for i = 1, 32 do
                if     arg[i] == 1    then
                    num = num + bit.data32[i]
                elseif arg[i] ~= 0 then
                    return num            
                end                
            end     
            return num                   
        else
           return num    
        end    
    end
    
    function bit:prit( arg )
        local tr = bit:d2b(arg)
        
        if tr == nil then
            print("o")
            return
        end
        for i = 1, #tr do
            print(tr[i])
        end
    end
    
    function bit:lsh( arg , n )
        local num = tonumber( arg )
        local n1 = tonumber( n )
        local rr = bit:d2b(0)
        local tr = {}
        
        if num == nil then
            return 0
        end
        
        if n1 == nil then
            return 0
        end
        
        local num1 =  bit:d2b ( arg )
    
        if n1 < 32 and n1 > 0 then
            for i = 1, 32 - n1 do
                num1[i] =  num1[i+n1]
                num1[i+n1] = 0            
            end                        
            rr = num1        
        end
        
        return bit:b2d(rr)
    end
    
    function bit:rsh( arg , n )
        local num = tonumber( arg )
        local n1 = tonumber( n )
        local rr = bit:d2b(0)
        local tr = {}
        
        if num == nil then
            return 0
        end
        
        if num < 0 then
            return 0
        end
        
        if n1 == nil then
            return 0
        end
        
        local num1 =  bit:d2b ( arg )
    
        if n1 < 32 and n1 > 0 then
            for i = 32 - n1, 1, -1 do
                num1[i+n1] = num1[i]
                num1[i] = 0            
            end                        
            rr = num1        
        end
        
        return bit:b2d(rr)
    end
    
    function bit:aand( arg1 , arg2 )
        local num1 = tonumber( arg1 )
        local num2 = tonumber( arg2 )
        
        if num1 == nil then
            return 0
        end    
    
        if num2 == nil then
            return 0
        end
        
        local tr1 = bit:d2b ( num1 )
        local tr2 = bit:d2b ( num2 )
        local tr3 ={}
        
        for i = 1, 32 do
           if tr1[i] == 1 and tr2[i] == 1 then
              tr3[i] = 1
           else
              tr3[i] = 0
           end
        end     
        return bit:b2d(tr3)
    end
    
    function bit:oor( arg1 , arg2 )
        local num1 = tonumber( arg1 )
        local num2 = tonumber( arg2 )
        
        if num1 == nil then
            return 0
        end    
    
        if num2 == nil then
            return 0
        end
        
        local tr1 = bit:d2b ( num1 )
        local tr2 = bit:d2b ( num2 )
        local tr3 ={}
        
        for i = 1, 32 do
           if tr1[i] == 0 and tr2[i] == 0 then
              tr3[i] = 0
           else
              tr3[i] = 1
           end
        end     
        return bit:b2d(tr3)
    end
    当你的才华还撑不起你的野心时,那你就应该静下心来学习。
  • 相关阅读:
    快速排序和归并排序
    docker 配置redis主从配置 集群 正式部署
    物联网平台定位
    如何让我的设备连接上云?参考如下路径
    MQTT协议中文版
    org.eclipse.paho.client.mqttv3 源码解析(二) 接收
    org.eclipse.paho.client.mqttv3 源码解析(一) 发送
    基于mqtt的消息推送(三)客户端实现
    基于mqtt的消息推送(二)服务端实现
    基于mqtt的消息推送(一)技术选型
  • 原文地址:https://www.cnblogs.com/aceg/p/4495775.html
Copyright © 2020-2023  润新知