在这种情况下,&&和&之间有什么不同?

jef*_*g24 -2 c binary bitwise-operators

我在c中创建了一个简单的程序:

int y=33, x=45;
y = y && x;
printf("%d\n",y);
y = y & x;
printf("%d\n",y);
Run Code Online (Sandbox Code Playgroud)

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

Riz*_*123 5

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

(还要注意的是,return/result该的logical AND运营商总是true或者false,它不能像24左右!)

true  =  true  && true
false =  false && true
false =  true  && false
false =  false && false
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下y得到1因为33而且45都是真的!因为如果数字是non-zero数字则意味着true.只0/false表示false.甚至-5意味着true!

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

(y = 1)    0000 0001 & 
(x = 45)   0001 1101 = 
           ---------
(y = 1)    0000 0001
Run Code Online (Sandbox Code Playgroud)

哪个等于1然后才能到达y

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

如果你想计算3345那么你要的结果分配给一个这样的其它变量(这样你的初始值(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;

}
Run Code Online (Sandbox Code Playgroud)

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

printf("%d\n", (y && x));
printf("%d\n", (y & x));
Run Code Online (Sandbox Code Playgroud)