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);
}
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
が、それはこの場合2
には、AND
に正確に他の入力があなたを与えるとINGのようAND
sです。スペース節約するために8ビットを仮定し
:2の補数で
0 = 00000000
~0 = 11111111
2 = 00000010
~0&2 = 00000010
2の補数を0にする必要はないのですか?たとえば、補数が見つかるたびに、補数2を求めたい場合は-3を得ます(2の補数を使用します)。この場合、0のビット補数は-1なので、ビットごとにAND -1と2が必要ですか?間違っていますか? –
@SaiSankalpビット単位の補数は、符号付きの数値と2の補数とは関係ありません。単なるビット演算です。 2の補数は、負の整数が持つビットパターンを決定するので、通常のビット操作で加算すると正しい結果が得られます。 – Motti
@SaiSankalpはこの答えを見ています。http://stackoverflow.com/a/791340/3848 – Motti
は、-1そのビットがセットされています。 – user2357112