2017-04-25 2 views
-4

ちょうど約2's complementの方法を読んでいて、単項マイナスを使って負の数にするよりも速いのだろうかと思っていました。単項マイナスvs 2の補数を負にする

単項マイナス

int a=10; 
a=-a; 

2の補数

int a=10; 
a=~a+1; 

OUTPUT

-10どちらの場合も 時間がかかりますか?

+2

このような単純性について「より速くなる」と言えば、話題にならないかもしれませんが、ここでうまく受け入れられません。 –

+0

@BartekBanachewiczナンバーネガティブにする時間が少ないのは知っていましたか?または彼らは同じ時間を取るか? – Sniper

+0

コンパイラが2番目のコードの方が高速なコードを生成するのは、非常に奇妙なことです。 – HolyBlackCat

答えて

4

2番目のオプションは動作が定義されていません。 C++標準では、負数の表現に2の補数を必要としませんが、期待通りの動作を保証するものではありません。

2の補数を使用するプラットフォームでは、コンパイラは両方のフォームをより高速に最適化するため、両方の操作の速度が同じになります。

+0

しかし、コードを実行した後、私は-10の出力を得ます。 – Sniper

+0

@Sniperこの回答をもう一度読んでください。 –

+0

[OK]を取得しました。ありがとう – Sniper

関連する問題