【问题标题】:What's different between && and & in this case? [closed]在这种情况下 && 和 & 有什么不同? [关闭]
【发布时间】:2015-01-01 19:09:58
【问题描述】:

我用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)。所以在y = y && x; 之后,y 等于 1(因为 x 和 y 都非零)。 & 是位运算符。这两个数字都将零位设置为 1,因此y = y & x; 的结果也是 1。
  • @squeamish ossifrage 谢谢你的解释....虽然我的帖子很奇怪并且得到-2,但我很高兴。谢谢你的帮助......我很感激......!!!
  • y = y & x 被执行时,你错过了y 不是33 的事实。
  • 我的回答对您有帮助还是您需要更多帮助?

标签: c binary bitwise-operators


【解决方案1】:

第一个运算符&&是逻辑运算符,意思是:

(还要注意logicalAND运算符的return/result总是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!

如果您想计算 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;

}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2013-04-23
    相关资源
    最近更新 更多