概要

2の補数計算は、負の数の表現やビット演算などに利用されます。
今回は、Rubyを用いた2の補数計算の実装方法について解説します。

2の補数計算とは

2の補数計算とは、2進数において負数を表現する方法の一つであり、負数を正確に表現するために利用されます。
2の補数は、ある数値を2進数で表現した場合に、そのビット反転を行い、最下位ビットに1を加えたものです。
例えば、10進数の-3を2進数で表現する場合、3を2進数に変換してビット反転したものに1を加えた1011が2の補数となります。

Ruby での2の補数計算の実装

Rubyには、2進数を表現するためのビット演算子が用意されているため、2の補数計算を簡単に実装することができます。
以下は、負の数を2の補数で表現するためのメソッドの実装例です。

def two_comp(n, bits)
  if (n & (1 << (bits - 1))) != 0
    return n - (1 << bits)
  end
  n
end

p two_comp(1, 8) #=> 1
p two_comp(255, 8) #=> -1
p two_comp(254, 8) #=> -2
p two_comp(253, 8) #=> -3