2017-04-18 11 views
0

私には質問があります!オペレーター。論理演算子!整数値の場合

私は整数の変数、元に適用する場合:

int i=7; 
!i; 
return i; 

機能は、[OK]を、私に7を与えます。 このコードをコンパイルする前に、私は248(否定演算子は00000111から11111000に)返されることがほぼ確実でした。 (私はgccを使用しています)。

なぜ間違っていますか?忍耐をありがとう!

+1

また、 '!'はビット単位ではなく論理否定であり、int型は符号なし8ビット量ではありません。 – user2357112

答えて

1
  1. 変更した値を変数に保存しませんでした。
  2. '!'ビット単位ではない論理演算子です。それは真の値を偽にしたり、逆にしたりする。

論理演算では整数値7がtrueです。逆にすると0になり、falseを意味します。

2

操作の結果を保存しません。演算子は結果を返しますが、元の変数は更新されません。結果を変数に代入する必要があります。 !~と同じではありません。前者は論理not演算子であり、後者はbitwise negate演算子です。後者はあなたが必要とするものです。

したがってi = ~iまたはreturn ~iは、あなたが意図した通りに行動します。

+0

'〜i'はビット単位で32ビットを行います。私は 'i^0xff'がより良い提案になると思います。 –

+0

@AjayBrahmakshatriya正しい数の 'ffff'を入力すると、これらの2つは同等です。 – Lundin

+0

はい、OPは248から7を予想します。したがって、0xffは適切でしょうか?そして '〜' –