From: Chris Howe Date: 2009-07-16T16:50:44+09:00 Subject: Re: Help with making this prettier? --00151750e896aefa29046ecdedfe Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit How about this: def bit_field(from,to,val) return ( val>>from ) & ( (2 << (to - from) ) - 1) end In binary 2<<(to-from) is going to be a 1 with (to-from+1) zeros after it, subtracting 1 leaves you with just (to-from+1) 1's in the lower bits of the number. val>>from shifts the bit field over to the lower bits. Bitwise anding the two together masks off the upper order bits of val, leaving you with the value you are looking for. On Thu, Jul 16, 2009 at 10:26 AM, Pito Salas wrote: > What I want to do is to extract the integer value corresponding to a bit > field within a FixNum. That is, for example, what is the integer value > formed by bits 4,5,6,7,8 of a number? > > This is my ugly first cut. There must be a library function that does > this but I can't find it. Anyone have a pointer, that would be great!! > Or a suggestion on refactoring/rewriting this? > > Thanks! > > def bit_field(from, to, val) > accum = 0 > ind = 0 > from.upto(to) do |index| > bitval = val[index] > accum = accum + bitval * (2 ** ind) > ind = ind + 1 > end > accum > end > -- > Posted via http://www.ruby-forum.com/. > > --00151750e896aefa29046ecdedfe--