あなたのコードでは、2の補数を実行する必要があるかもしれません:私はこれをそこに捨てたかっただけです(負のバイナリを取得するより速い方法):
2の補数は、バイナリの値を見つけるのに非常に役立ちますが、そのような問題を解決するためのはるかに簡潔な方法を考えました(他の誰もそれを公開しているのを見たことがありません):
バイナリを考えてみましょう。たとえば、1101は、[スペース「1」が符号であると仮定して] -3に等しくなります。
2の補数を使用して、これを実行します...1101を0010に反転...0001 + 0010を追加===>は、正の2進数=3の0011.0011になります。したがって、1101 = -3!
私が気づいたこと:
すべての反転と加算の代わりに、正のバイナリ(たとえば0101)を解くための基本的な方法は(2 3 * 0)+(2 2 * 1)+(2 1 * 0)+(2 0 * 1)=5。
ネガティブでまったく同じコンセプトを実行してください!(少しひねりを加えて)
たとえば、1101を取り上げます。
2 3 * 1 = 8の代わりに最初の数については、-(2 3 * 1)= -8を実行します。
次に、通常どおり続行し、-8 +(2 2 * 1)+(2 1 * 0)+(2 0 * 1)= -3を実行します。
それがお役に立てば幸いです!