c - 在这种情况下 && 和 & 有什么不同?

标签 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?

最佳答案

第一个运算符&&是一个逻辑运算符,其含义是:

(另请注意,逻辑 AND 运算符的返回/结果始终为truefalse,不能是 24 左右!)

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

因此,在您的情况下,y 得到 1,因为 3345 都是 true!因为如果一个数字是非零数字,则表示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));

关于c - 在这种情况下 && 和 & 有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26759802/

相关文章:

客户端服务器实现

c++ - 内联 asm 将值写入内存

javascript - 从二进制 "01000111"中获取所有索引值为 1

java - 如何将这段代码翻译成 GUI 可以读取的内容

c - LINUX:是否可以编写不依赖 libc 库的工作程序?

java - 为什么按位与给出不同的字节?

改变strstr()指向的值; C

c - 使用 C 程序执行程序

ios - 无法识别的选择器已发送到实例Objective-C

c - C中位运算符的应用及其效率?