On 10/26/06, Yukihiro Matsumoto <matz / ruby-lang.org> wrote: > Hi, > > In message "Re: Bitwise inversion of Bignum" > on Tue, 24 Oct 2006 22:49:24 +0900, Ian Roddis <ian.roddis / gmail.com> writes: > > |A bitwise inversion of a Bignum sometimes yields odd results. As tested > |in 1.8.5: > | > |./ruby -v > | > |ruby 1.8.5 (2006-08-25) [i686-linux] > |./ruby -e 'a= "7fffff00".hex ; b= "ffffff00".hex ; printf "%b => %b\n", > |a, ~a ; > | > |printf "%b => %b\n", b, ~b' > |1111111111111111111111100000000 => ..10000000000000000000000011111111 > |11111111111111111111111100000000 => ..1 > | > |In the first case, the '..1' is expected, as per the documentation, but > |annoying. > > Both of them are as expected from my view point. What did you expect? Perhaps I don't understand: irb(main):01:0> sprintf("%b", "ffffff00".hex) => "11111111111111111111111100000000" irb(main):02:0> "ffffff00".hex => 4294967040 So this is a positive number and the 2's complement representation should have all zeroes in the msb's. So shouldn't sprintf("%b", ~("ffffff00".hex)) give something like: ..100000000000000000000000011111111 What am I missing? -- Rick DeNatale My blog on Ruby http://talklikeaduck.denhaven2.com/