Durchlaufen von Bits in einer Ganzzahl, Ruby

Ich mache ein Programm, bei dem eines der Probleme darin besteht, dass ich das Bitmuster in einigen ganzen Zahlen analysieren muss.

Aus diesem Grund möchte ich in der Lage sein, so etwas zu tun:

#Does **NOT** work:
num.each_bit do |i|
   #do something with i
end

Ich konnte etwas machen, das funktioniert, indem ich Folgendes tat:

num.to_s(2).each_char do |c|
   #do something with c as a char
end

Dies hat jedoch nicht diePerformance Ich würde gern.

Ich habe festgestellt, dass Sie dies tun können:

0.upto(num/2) do |i|
   #do something with n[i]
end

Diese haben noch schlechtere Leistungen als dieeach_char Methode

Diese Schleife wird millionenfach oder öfter ausgeführt, daher möchte ich, dass sie so schnell wie möglich ist.

Als Referenz dient hier die Gesamtheit der Funktion

@@aHashMap = Hash.new(-1)

#The method finds the length of the longes continuous chain of ones, minus one 
#(101110 = 2, 11 = 1, 101010101 = 0, 10111110 = 4)

def afunc(n) 
if @@aHashMap[n] != -1
    return @@aHashMap[n]
end

num = 0
tempnum = 0
prev = false

(n.to_s(2)).each_char do |i|
    if i
        if prev
            tempnum += 1
            if tempnum > num
                num = tempnum
            end
        else
            prev = true
        end
    else
        prev = false
        tempnum = 0
    end
end

@@aHashMap[n] = num
return num
end

Antworten auf die Frage(8)

Ihre Antwort auf die Frage