C文-x、〜X + 1、及び〜(X-1)と同じ結果が得られたことを証明するには?

StackOverflow https://stackoverflow.com/questions/2278518

  •  21-09-2019
  •  | 
  •  

質問

私はこの文、証拠の背後にあるロジックを知りたいです。 C式-X、〜X + 1、および〜(X-1)のすべては、任意のxに対して同じ結果をもたらします。私は、これは具体的な例のために真であることを示すことができます。私はこれを証明する方法は、2の補数の性質とは何かを持っていると思います。何か案は?

役に立ちましたか?

解決

あなたはそのビット単位の補数に番号を追加するときに何を得る考えてみましょう。 nビットの整数xのビットごとの補数は1どこでもxは0、およびその逆を有しています。だから、見ることは明らかです。

X +〜X = 0b11に... 11(すべてのもののnビット値)

に関係なくxのビット数。さらに、すべてのもので満たされたnビットの数に1を追加すると、それがゼロに折り返すようになりますので注意してください。したがって、私たちは、参照してください。

X +〜X + 1 = 0b11に... 11 + 1 = 0 そして、〜X + 1 = -xます。

同様に、音符(X - 1)+〜(X - 1)= 0b11に... 11。次に、(X - 1)+〜(X - 1)+ 1 = 0、および〜(X - 1)= -x

他のヒント

私はあなたが戻って、我々は2の補数であることを現代の整数のALUでの負の数を定義しているという事実に、むしろ些細な削減以外の便利な公理の任意の並べ替えからこれを証明することができますかどうか分からない。

コンピュータが補数で実装されるのHAVE は、バイナリのハードウェアを補完していない、それはそこに様々な魅力的な性質があり、ほぼすべてが、これらの日、そのように構築されているだけのことです。 (ただし、浮動小数点ない!それらは1の補数です!)

だから我々は2の補数で負の数を表すために起こるマシンを構築します。 2の補数で表現するには負の数を表示する式は正確であるが、我々は彼らにそのように定義されたという理由だけで。それは、現代のマシンでの負の整数のための公理的基礎です。

私たちは2の補数の面で否定を定義するので、あなたは基本的に、公理を参照している私はそれがすべての証拠が最終的に何をすべきかだと仮定もののます。

私は本当に理論の男ではないよ、なぜ多分これです。 : - )

〜X + 1 -Xの2の補数+ 1(即ち、負の数)表現と等価である、〜(X-1)も(〜(X-1、最後のビットが1である場合を考える)同じを表します=〜(b1b2.b(N-1)が1 - 0)= b1'b2' ... B(N-1) '1 = b1'b2' ... B(N-1) '0 + 1 = 〜X + 1の最後のビットのための類似症例ホールドが0〜(X-1)=〜(b1b2..bi100..00 - 1)である。=〜b1b2..bi011..11 = b1'b2' .. BI '100..00 = b1'b2' .. bi'011..11 + 1 =〜のx + 1。

私は誰もが便利見つける必要があることを直感的に、について説明を提示しようとするでしょう。どうしてもと言うなら、私たちは、より正式なアプローチを試みることがあります。

2の補数表現では、ゼロ要素のユニークな表現を持っているために、私たちは一つの正の要素を生け贄に捧げます。その結果、正のミラーを有していない余分な負の数があります。

だから、与えられた2ビットは、我々が得る:としてバイナリで表現される{+1, 0, -1, -2}をます:

-2    10
-1    11
 0    00
+1    01

だから、私たちは鏡のようにゼロと考えることがあります。今、私たちはその符号を反転したい場合は、我々はすべてのビットを反転することにより開始することができ、整数xを与えられました。ポジティブとネガティブの間にはゼロではありませんでした場合、これは十分だったでしょう。ゼロが陽性で、移行するので、しかし、我々はそのために補償しています。

問題に言及した2つの式は~(x-1)前と~x+1はビットを反転した後、この補償を行います。あなたは簡単に私達の2ビットの例では+1-1を使用していることを確認することができます。

C標準は補数の使用は負の数を表すために補完を必要としないように、

一般的に、これは、真実ではない。

具体的には、署名された型に〜を適用した結果が定義されていない。

しかし、私の知る限りでは、すべての近代的なマシンが整数の2の補数を使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top