2016-07-03 22 views
0

xのビット補数が-1(2の補数を使用)で、yが2であるため、zの値が0になると予想していますが、私がプログラムを実行するときにzを2にします。ビット演算子と補数演算子を組み合わせる

CODE

#include <stdio.h> 
int main() 
{ 
    int x = 0, y = 2; 
    int z = ~x & y; 
    printf("%d\n", z); 
} 
+0

は、-1そのビットがセットされています。 – user2357112

答えて

4

0のビット単位の賛辞は、すべての1が、それはこの場合2には、ANDに正確に他の入力があなたを与えるとINGのようAND sです。スペース節約するために8ビットを仮定し

:2の補数で

0 = 00000000 
~0 = 11111111 

2 = 00000010 

~0&2 = 00000010 
+0

2の補数を0にする必要はないのですか?たとえば、補数が見つかるたびに、補数2を求めたい場合は-3を得ます(2の補数を使用します)。この場合、0のビット補数は-1なので、ビットごとにAND -1と2が必要ですか?間違っていますか? –

+0

@SaiSankalpビット単位の補数は、符号付きの数値と2の補数とは関係ありません。単なるビット演算です。 2の補数は、負の整数が持つビットパターンを決定するので、通常のビット操作で加算すると正しい結果が得られます。 – Motti

+0

@SaiSankalpはこの答えを見ています。http://stackoverflow.com/a/791340/3848 – Motti

関連する問題