lua自己実現ビット演算

1001 ワード


--2進法に変換
function numberToBits(src)  
  local result = {}  
  local bitLen = 32 
  for i = 1, bitLen do  
    result[i] = src % 2  
    src = math.floor(src / 2)  
  end  
  
  return result  
end 

注記:配列を定義し、入力した数をバイナリに変換します.
 
--現在の最初の0以外の値の桁数を取得します.
function getBitOrder(src)
    local bitLen = 32
    local result = 0
    for i=1, bitLen do
        if src[i]==1 then
            result = i
            return result
        end
    end
    return 0
end

注記:この基準値としての判断で、基準値を取得するためのシーケンス番号
function isBitIn(src, haveType)
    local _order = getBitOrder(numberToBits(haveType))
    local _srcTable = numberToBits(src)
    if _srcTable[_order]==1 then
        return true
    end

    return false

end

注記:srcにhaveTypeのタイプが含まれているかどうかを判断し、戻り値から判断する
使用方法:
   
if  isBitIn(0x00800402,   0x00000400) then
        
end

注記:判断0 x 00800402と0 x 000000400はビットまたは操作を行い、判断を行う