&& amp;和&和&在这种情况下?

时间:2014-11-05 14:37:42

标签: c binary bitwise-operators

我在c:

中创建了一个简单的程序
int y=33, x=45;
y = y && x;
printf("%d\n",y);
y = y & x;
printf("%d\n",y);

输出为1和1.但如果我使用计算器,则显示x和y为33.为什么它变为1?

1 个答案:

答案 0 :(得分:5)

第一个运算符&&是逻辑运算符,表示:

(另请注意return/result logical运算符的AND始终为truefalse,它不能像24或所以!)

true  =  true  && true
false =  false && true
false =  true  && false
false =  false && false

因此,在您的情况下y获取1,因为3345都是真的!因为如果数字是non-zero数字,则表示true。只有0/false表示false。即使-5表示true

第二个运算符&是一个按位和运算符,在您的情况下意味着:

(y = 1)    0000 0001 & 
(x = 45)   0001 1101 = 
           ---------
(y = 1)    0000 0001

等于1,然后指向y

这就是为什么两个结果都是1的原因!

如果您想计算33& 45然后你必须将结果分配给另一个这样的变量(这样你的起始值(x,y)就不会被覆盖):

#include<stdio.h>

int main() {

    int y = 33, x = 45, z;

    z = y && x;
    printf("%d\n", z); 

    z = y & x;
    printf("%d\n", z);

    return 0;

}

你也可以在没有这些代码行的情况下进行这项计算:

printf("%d\n", (y && x));
printf("%d\n", (y & x));