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?
第一个运算符&&是逻辑运算符,表示:
(还要注意的是,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!
如果你想计算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;
}
Run Code Online (Sandbox Code Playgroud)
您也可以在没有这些代码行的情况下进行此计算:
printf("%d\n", (y && x));
printf("%d\n", (y & x));
Run Code Online (Sandbox Code Playgroud)