-1

この行 (x = n & 5;) は、以下のコードで何を意味しますか? 私が知る限り、アンパサンドはポインターに使用されます。このコードがコンパイルされるとは思っていませんでしたが、コンパイルして正常に実行されました。私が得た結果は

0,1,0,1,4,5,4,5,0,1,

#include <stdio.h>

int main(void){
    int x, n;
    for (n = 0; n < 10; n++){
        x = n & 5;
        printf("%d,", x);
    }
    printf("\n");
    return 0;
}
4

4 に答える 4

6

この場合は、ビットごとの AND です。

x = n & 5;

にあるものと 5 (0b101) の AND をとりnます。

AND は、値を表すビットに対して機能します。両方の値のその位置が 1 の場合、結果は 1 になり、それ以外の場合は 0 になります。

5 との AND 演算を行っており、0b101 の 2 ビットで作成できる値は 4 つしかないため、x に使用できる値は 1、4、5、および 0 のみです。

n           &    5     = x
1 (0b0001)  &  0b0101  = 1  (0b0001)
2 (0b0010)  &  0b0101  = 0  (0b0000)
3 (0b0011)  &  0b0101  = 1  (0b0001)
4 (0b0100)  &  0b0101  = 4  (0b0100)
5 (0b0101)  &  0b0101  = 5  (0b0101)
6 (0b0110)  &  0b0101  = 4  (0b0100)
7 (0b0111)  &  0b0101  = 4  (0b0100)
8 (0b1000)  &  0b0101  = 0  (0b0000)
9 (0b1001)  &  0b0101  = 1  (0b0001)
于 2012-04-05T00:07:39.647 に答える
5

これが「ビット単位のand」演算子です。通常、2つの整数を取り、両方のパラメーターにあるビットのみが設定された整数を返します。

base10 base2
6       0110
3       0011
6&3     0010   (=2)

|どちらかが設定したビットを設定する「ビット単位または」もあります。

base10 base2
6       0110
3       0011
6|3     0111   (=7)

^異なるビットを設定する「ビット単位のxor」があります。

base10 base2
6       0110
3       0011
6^3     0101   (=5)
于 2012-04-05T00:12:00.410 に答える
2

これはビットごとの AND 演算子です。n の値は 5 と AND 演算されます。

于 2012-04-05T00:07:36.390 に答える
2

この場合はバイナリ and であると既に説明しました。しかし、これにはもう少し説明が必要です。C およびその他の C に似た言語には、2 つの&演算子があります。一方は単項で、もう一方はバイナリです。

単項演算子は1つの値のみに作用しますが、2演算子は 2 つの値を取ります。C では、二項演算子が単項演算子よりも優先されます。あなたが書くなら

int b;
int *a = &b;

次にb、オペレーターが操作できる唯一の値です。ただし書くと

int c, d;
int d = c & d;

この場合、演算子は処理する 2 つの値を持ち、バイナリ解釈が単項解釈よりも優先されます。これは&オペレーターだけでなく、そのカウンターパートにも適用されることに注意してください。*

int *f;
int h = *f;

だけでなく

int i,j;
int k = i * j;

すべての演算子と同様に、優先順位は括弧でオーバーライドできます。

int l, *m;
int n = l * (*m);
于 2012-04-05T00:15:02.007 に答える