• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 9,comments - 14,trackbacks - 0
            --[[
            Description:
                FileName:bit.lua
                This module provides a selection of bitwise operations.
            History:
                Initial version created by  陣雨 2005-11-10.
            Notes:
              ....
            ]]
            --[[{2147483648,1073741824,536870912,268435456,134217728,67108864,33554432,16777216,
                    8388608,4194304,2097152,1048576,524288,262144,131072,65536,
                    32768,16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1}
                    ]]


            bit={data32={}}
            for i=1,32 do
                bit.data32[i]=2^(32-i)
            end

            function bit: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   --bit:d2b

            function    bit: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   --bit:b2d

            function    bit:_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 --bit:xor

            function    bit:_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 --bit:_and

            function    bit:_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 --bit:_or

            function    bit:_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 --bit:_not

            function    bit:_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 --bit:_rshift

            function    bit:_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 --bit:_lshift


            function    bit:print(ta)
                local   sr=""
                for i=1,32 do
                    sr=sr..ta[i]
                end
                print(sr)
            end

            bs=bit:d2b(7)
            bit:print(bs)                          
            -->00000000000000000000000000000111
            bit:print(bit:d2b(bit:_not(7)))         
            -->11111111111111111111111111111000
            bit:print(bit:d2b(bit:_rshift(7,2)))    
            -->00000000000000000000000000000001
            bit:print(bit:d2b(bit:_lshift(7,2)))    
            -->00000000000000000000000000011100
            print(bit:b2d(bs))                      -->     7
            print(bit:_xor(7,2))                    -->     5
            print(bit:_and(7,4))                    -->     4
            print(bit:_or(5,2))                     -->     7


            --end of bit.lua
            posted on 2005-11-11 03:08 陣雨 閱讀(15183) 評(píng)論(7)  編輯 收藏 引用 所屬分類: Lua Programming

            FeedBack:
            # re: Lua實(shí)現(xiàn)的 位運(yùn)算 模塊
            2005-11-11 03:25 | 陣雨
            這個(gè)bit處理模塊比起由C庫提供的在效率上會(huì)打些折扣,但它是由
            純Lua實(shí)現(xiàn)的哦 ^_^  回復(fù)  更多評(píng)論
              
            # re: Lua實(shí)現(xiàn)的 位運(yùn)算 模塊
            2008-08-28 11:57 | 天堂的隔壁
            如果這個(gè)數(shù)字大于7fffffff的話,d2b會(huì)出問題
            也就是說負(fù)數(shù)的時(shí)候,  回復(fù)  更多評(píng)論
              
            # re: Lua實(shí)現(xiàn)的 位運(yùn)算 模塊[未登錄]
            2009-05-20 23:29 | haha
            bit:_rshift和bit:_lshift 在n=0時(shí),處理不正確,應(yīng)該增加下列語句:
            if n == 0 then
            return a
            end  回復(fù)  更多評(píng)論
              
            # re: Lua實(shí)現(xiàn)的 位運(yùn)算 模塊
            2009-10-26 10:45 | RexGene
            效率太慢,用其他算數(shù)的方法取代位運(yùn)算效率還比這個(gè)高  回復(fù)  更多評(píng)論
              
            # re: Lua實(shí)現(xiàn)的 位運(yùn)算 模塊
            2013-11-27 02:40 | wapeter
            您好陣雨,謝謝您的代碼!
            我把你的代碼重構(gòu)了一次, 修改了部分左右位移的速度問題
            還有一些測(cè)試用例, 互相參考:

            http://hi.baidu.com/wapeter/item/80da1a3f342c98b9633aff86


              回復(fù)  更多評(píng)論
              
            # re: Lua實(shí)現(xiàn)的 位運(yùn)算 模塊
            2014-02-17 10:54 | 你好
            lua的5.2以后版本提供了相關(guān)的功能~  回復(fù)  更多評(píng)論
              
            国产精品久久成人影院| 亚洲综合伊人久久综合| 成人综合伊人五月婷久久| 超级97碰碰碰碰久久久久最新| 久久精品国产一区二区三区| 久久97精品久久久久久久不卡| 久久99热只有频精品8| 欧美牲交A欧牲交aⅴ久久| 香蕉久久av一区二区三区| 狠狠色狠狠色综合久久| 国产精品一区二区久久精品涩爱| 久久伊人五月天论坛| 欧美粉嫩小泬久久久久久久 | 香蕉久久夜色精品国产小说| 97精品久久天干天天天按摩| 国产精品久久精品| 久久综合狠狠色综合伊人| 青青青青久久精品国产h| 欧美一区二区精品久久| 色综合久久综合网观看| 久久国产成人午夜aⅴ影院| 久久精品亚洲男人的天堂| 亚州日韩精品专区久久久| 99久久做夜夜爱天天做精品| 人妻精品久久无码专区精东影业 | 久久丫忘忧草产品| 一本色道久久88—综合亚洲精品| 无码AV中文字幕久久专区| 国产精品久久久久jk制服| 国产精品视频久久久| 国产福利电影一区二区三区久久久久成人精品综合 | 亚洲国产日韩欧美综合久久| 伊人久久大香线蕉成人| 久久狠狠爱亚洲综合影院| 久久午夜羞羞影院免费观看| 久久99精品国产99久久6男男| 久久久WWW成人免费毛片| 久久综合亚洲色一区二区三区| 色欲综合久久中文字幕网| 久久99精品国产99久久| 久久亚洲av无码精品浪潮|