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