class Integer

for older rubbies … slow but works … >2.1.0 supports this and is much faster no need to improve as 1.9x is no longer supported

Public Instance Methods

bit_length() click to toggle source
# File lib/setfu.rb, line 1232
def bit_length
  pos = 0
  n = self
  loop do
    break if n == 0
    break if n == -1
    n >>= 1
    pos += 1
  end
  return pos
end
lsb_bit_position() click to toggle source
# File lib/setfu.rb, line 1247
def lsb_bit_position
  return nil if zero?
  pos = 0
  n = self
  while (n & 0xffffffffffffffff) == 0
    n >>= 64
    pos += 64
  end
  while (n & 0xff) == 0
    n >>= 8
    pos += 8
  end
  mask = 1
  loop do
    break if mask == (n & mask)
    mask <<= 1
    pos += 1
  end
  return pos
end
msb_bit_position() click to toggle source
# File lib/setfu.rb, line 1267
def msb_bit_position
  t = bit_length
  return t.zero? ? nil : t-1
end