# bits.rb # # $Date: 2000/08/21 17:10:14 $ # Copyright (c) 2000 Masatoshi SEKI # # bits.rb is copyrighted free software by Masatoshi SEKI. # You can redistribute it and/or modify it under the same term as Ruby. class Bits def initialize(n) @size = n @bits = "\0" * ((n/8)+1) end public attr_reader(:size) 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[0] ? 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