andy> I wrote the following code to create a BitVector type as an extension
andy> some time ago.  It was a quick hack, and I make no guarantees
andy> that it even works with the latest verions...

I wrote too.

--> http://www2a.biglobe.ne.jp/~seki/ruby/bits.rb

class Bits
def initialize(n)
@size = n
@bits = "\0" * ((n/8)+1)
end
public
def lengh
size
end

private
def idx(i)
raise "index" if (i >= size) or (i < 0)
return i/8, (1<<(i%8))
end

public
def set(i)
bytes, bits = idx(i)
c = @bits[bytes]
@bits[bytes] = c | bits
end

public
def reset(i)
bytes, bits = idx(i)
c = @bits[bytes]
@bits[bytes] = c & (~bits)
end

public
def set?(i)
bytes, bits = idx(i)
c = @bits[bytes]
c & bits != 0
end

public
def to_i
sum = 0
m = 1
@bits.each_byte do |e|
sum += e * m
m = m << 8
end
sum
end
end

if __FILE__ == \$0
sz = ARGV ? ARGV.shift.to_i : 1024 * 1024

b = Bits.new(sz)
sz.times do |i|
b.set(i) if i % 2 > 0
end

(sz-1).downto(0) do |i|
print (b.set?(i)? "1" : "0")
end
puts

puts
puts sprintf("%b", b.to_i)
puts b.to_i
end