这一行(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;
}
答案 0 :(得分:5)
在这种情况下,它是按位AND。
x = n & 5;
将AND 5(即0b101)与n
中的任何内容一起使用。
AND处理表示值的位。如果两个值在该位置都为1,则结果为1,否则为0。
由于我们与5进行AND运算,并且只有4个值可以用0b101中的两个位进行,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)
答案 1 :(得分:4)
那是“按位和”运算符。通常,它需要两个整数,并返回一个整数,该整数只设置了两个参数中的位。
base10 base2
6 0110
3 0011
6&3 0010 (=2)
还有“按位或”|
设置任何一个设置的位。
base10 base2
6 0110
3 0011
6|3 0111 (=7)
并且有“bitwise xor”^
设置不同的位。
base10 base2
6 0110
3 0011
6^3 0101 (=5)
答案 2 :(得分:2)
这是一个按位运算符。 n的值与5进行AND运算。
答案 3 :(得分: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);