-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

在这种情况下,它是按位与。

x = n & 5;

将 AND 5(即 0b101)与n.

AND 作用于表示值的位。如果两个值在该位置都有 1,则结果将为 1,否则为 0。

由于我们用 5 进行与运算,而 0b101 中的两位只能生成 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

这就是“按位与”运算符。通常,它需要两个整数,并返回一个整数,该整数仅具有在它的两个参数中设置的位。

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

还有“按位或”|设置任何一个设置的位。

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

并且有“按位异或”^设置不同的位。

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

这是一个按位与运算符。n 的值与 5 进行与运算。

于 2012-04-05T00:07:36.390 回答
2

你已经被告知在这种情况下它是一个二进制和。但这需要更多的解释。在 C 和其他类 C 语言中,有两个&运算符。一个是一元的,另一个是二进制的。

元运算符单独作用于单个值,而二元运算符接收两个值。在 C中,二元运算符优先于一元运算符。如果你写

int b;
int *a = &b;

然后b是操作员可以处理的唯一值。如果你写但是

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

那么运算符有两个值可以使用,并且二进制解释优先于一元解释。请注意,这不仅适用于&运营商,也适用于其对应的*

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 回答