Прохождение биты в целом, ruby ​​

Я делаю программу, одна из проблем которой заключается в том, что мне нужно выполнить некоторый анализ битового шаблона в некоторые целые числа.

Из-за этого я хотел бы иметь возможность сделать что-то вроде этого:

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

Я смог сделать что-то, что работает, выполнив:

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

Это, однако, не имеет производительностиI хотелось бы.

Я обнаружил, что вы можете сделать это:

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

Это имеет даже худшую производительность, чем метод each_char

Этот цикл будет выполняться миллионы раз или больше, поэтому я бы нравится, чтобы это было как можно быстрее.

Для справки, вот вся функция

@@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
12
задан undur_gongor 6 June 2012 в 12:27
поделиться