数日前まで、この疑問が私の頭をよぎることはありませんでした。しかし、先週誰かが SO でOpenCL C 言語のベクトルの比較演算子について質問しました。答えるのは非常に簡単で、誰かが私の答えに次のようにコメントしていなかったら、すべてがそこで止まっていたでしょう:
条件が真の場合にスカラーが 1 を返し、ベクトルが -1 を返すのは少し面倒です。
私の最初の考えは、「0 が false で、他のすべての値が true である限り、誰が気にするか」ということでした。次に、すべてのビットが設定されているように、true の場合に -1 を返す方が理にかなっていると思いました: false が 0000..000 の場合、1111...111 が true であることは非常に論理的です。一部のビット演算に役立ちます。
このトピックについてもう少し調べてみると、特定の条件では LSB の代わりにすべてのビットを設定する方が高速であると示唆する人を見つけました (これは C 以外の言語用であり、残念ながらこの投稿を見つけることができません)。
しかし、今述べたことが正しいのなら、なぜ C で値 1 が選択されたのでしょうか? 私は標準がそうしていることを知っています...しかし、なぜですか?
それは歴史的なものですか?一部のシステムが 2 の補数表現を使用しないためでしょうか? それでも、これらのシステムが -1 を返すことは問題でしょうか? 実際、何か理由はありますか?