From: "mame (Yusuke Endoh)" Date: 2013-07-28T06:14:26+09:00 Subject: [ruby-core:56236] [ruby-trunk - Bug #8697] Fixnum complement operator issue Issue #8697 has been updated by mame (Yusuke Endoh). =begin I guess you mistake "the ones' complement of a binary number" for "the ones' complement system". The former is a kind of operation for the binary representation of a number, no matter what the number itself is. The latter gives a mapping that corresponds the binary representations to mathematical numbers. > See related articles on Wikipedia: (()) Actually it says: > The ones' complement of a binary number is defined as the value obtained by inverting all the bits in the binary representation of the number For example, the bit pattern of +0 is "all 0s" in both ones' and twos' complement systems. By the definition above, applying the ones' complement to +0 yields a number whose binary representation is "all 1s". This number that has "all 1" bit pattern represents -0 in ones' complement system, and -1 in twos' complement system. Ruby's Integer uses twos' complement system. Even without knowledge of it, "the ones' complement of 0 is -1", is very common phrase in the computer science. There is nothing wrong in both the implementation and documentation of Fixnum#~. =end ---------------------------------------- Bug #8697: Fixnum complement operator issue https://bugs.ruby-lang.org/issues/8697#change-40726 Author: torimus (Torimus GL) Status: Feedback Priority: Normal Assignee: Category: core Target version: current: 2.1.0 ruby -v: 1.9.3p448 Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN =begin By the (()), bitwise complement operator ((*~*)) to Fixnum instance should do ((*one's complement*)) with just flipping all bits. In fact, current implementation does ((*two's complement*)) due to or-ing with FIXNUM_FLAG, which is defined as 1. Either fix the documentation or the fix_rev function implementation. Affected versions: both 1.9.3 and 2.0.0 =end -- http://bugs.ruby-lang.org/