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