2

負の FixNum の符号なし解釈を判断するにはどうすればよいですか?

# unexpected, true
(~0b01111011).to_s(2) == ("-" + (~0b01111011).abs.to_s(2))

# expected, false
~0b01111011 == 0b10000100

次のような関数をどのように記述しますか。

123.unsigned_not(8) == 132

または、次のようにします。

-124.unsigned(8) == 132

編集:文字列を介してこれを行うことができますが、解決策は満足のいくものではありません

class Fixnum
  def unsigned_not(bits=16)
    to_s(2).rjust(bits,'0').gsub(/[01]/, '0' => '1', '1' => '0').to_i(2)
  end
end
4

2 に答える 2