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/