Bucle a través de bits en un entero, ruby

Estoy haciendo un programa donde uno de los problemas es que necesito hacer un análisis del patrón de bits en algunos enteros.

Por eso me gustaría poder hacer algo como esto:

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

Pude hacer algo que funciona haciendo:

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

Esto sin embargo no tiene laactuación Me gustaría.

He encontrado que puedes hacer esto:

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

Esto tiene un rendimiento aún peor que eleach_char método

Este bucle se ejecutará millones de veces, o más, por lo que me gustaría que fuera lo más rápido posible.

Para referencia, aquí está la totalidad de la función.

@@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

Respuestas a la pregunta(8)

Su respuesta a la pregunta