例えば:
unsigned int numA = 66; // or anything really
unsigned int numB = -numA;
unsigned int numC = numA & numB
ビットごとの補数演算子を使用して 2 の補数を取得できることを理解しています (+1 と組み合わせて)。
私が尋ねる理由は、チェス エンジンのコードでこれを見つけたからです。チェス エンジンは、絶対的な速度を得るために多くの「ハック」なことを行います。特に、1 秒間に何百万回も呼び出される手番生成関数がそうです。(それが魔法のビットボード移動生成の例であったことは助けにはなりません - それらすべての中で最も最適化されています)。特に、このチェス エンジン コードは、gcc コンパイルでしか正しく動作しません (私はそう思います)。
異なるコンパイラはこれをどのように扱いますか? 特に、VS Studio 2012 Express の C++ コンパイラと比較して、gcc はこれをどのように処理しますか。
ありがとう。