ここでいくつかの質問/回答を読んでいます:
誰かが数の 2 の補数を作成するサンプル コードを提供しました。
def twos_comp(val, bits):
"""compute the 2's compliment of int value val"""
if( (val&(1<<(bits-1))) != 0 ):
val = val - (1<<bits)
return val
さらに、誰かが 2 の補数を次のように定義しました。
2 の補数表記では、n ビットの 2 の補数を使用して符号を反転します。8 ビットの数値の場合、数値は 2^8 から減算され、その負数が生成されます。
これらの宣言は揺るぎないものでした。しかし、それは私の2の補数の理解に反するものです。2進数を反転して1を足す計算だと思っていました。
さらに、2 の補数は元の数の加法逆数であるという性質を持っているはずです。しかし、 twos_comp からの出力にはそれがないようです。私の手計算 (および私が書いたいくつかのテスト コード) で定義 を使用すると、数値とその 2 の補数を加算すると、1 がオーバーフローし、残りのビットがゼロになるため、加法性があることがわかります。逆プロパティ。
2 の補数には複数の定義がありますか、私は混乱していますか、それとも他の投稿からのその定義と関数は単に間違っていますか?