ビット単位の演算子を参照する場合、! の違いは何ですか? と〜?どちらもビットを反転させているような気がしますが、1 は最終的な答えに 1 を追加するのでしょうか?
~0xC4
compared to
!0xC4
ありがとう!
ビット単位の演算子を参照する場合、! の違いは何ですか? と〜?どちらもビットを反転させているような気がしますが、1 は最終的な答えに 1 を追加するのでしょうか?
~0xC4
compared to
!0xC4
ありがとう!
!はビット演算子ではなく、ブール演算子です。
ブール演算子は、一般に である真理値を操作しますint。ゼロ以外の値は真であり、0 は偽です。結果は常に1true の場合、0false の場合です。
!ブール値ではない&&ブール値であり、||ブール値またはこれらはif、ブール値が必要なため、たとえばで使用されるものです。ブール演算子や演算子も短絡しています。つまり、結果がわかっているときに評価を停止します。これは良いことです。つまり、1 || crash_and_burn()クラッシュして燃えることはありません。
しかし、ビット単位の演算子は、もちろんプロモーションなどの後、整数型の引数の各ビットで動作します。
~ビット単位ではない&はビット単位であり、|ビット単位または^ビットごとの排他的論理和 (xor) ですビット単位の演算子は (もちろん) ショートサーキットではありません。ビットのペアを操作するだけなので意味がありません。^ビット単位の演算子はありますが、^^ブール xor 演算子はありません。
~0xC4 はビットを反転し、これを行います:
1100 0100 (0xC4) --> 0011 1011 (0x3B)
!0xC4 は論理的真理値を反転し、これを行います:
True (0xC4) --> False (0)