1

ビット単位の演算子を参照する場合、! の違いは何ですか? と〜?どちらもビットを反転させているような気がしますが、1 は最終的な答えに 1 を追加するのでしょうか?

~0xC4

compared to

!0xC4

ありがとう!

4

3 に答える 3

7

!はビット演算子ではなく、ブール演算子です。

ブール演算子は、一般に である真理値を操作しますint。ゼロ以外の値は真であり、0 は偽です。結果は常に1true の場合、0false の場合です。

  • !ブール値ではない
  • &&ブール値であり、
  • ||ブール値または

これらはif、ブール値が必要なため、たとえばで使用されるものです。ブール演算子や演算子も短絡しています。つまり、結果がわかっているときに評価を停止します。これは良いことです。つまり、1 || crash_and_burn()クラッシュして燃えることはありません。

しかし、ビット単位の演算子は、もちろんプロモーションなどの後、整数型の引数の各ビットで動作します。

  • ~ビット単位ではない
  • &はビット単位であり、
  • |ビット単位または
  • ^ビットごとの排他的論理和 (xor) です

ビット単位の演算子は (もちろん) ショートサーキットではありません。ビットのペアを操作するだけなので意味がありません。^ビット単位の演算子はありますが、^^ブール xor 演算子はありません。

于 2013-05-02T13:13:21.440 に答える
2

~0xC4 はビットを反転し、これを行います:

1100 0100 (0xC4) --> 0011 1011 (0x3B)

!0xC4 は論理的真理値を反転し、これを行います:

True (0xC4) --> False (0)
于 2013-05-02T13:19:15.273 に答える