首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不应使用按位运算符代替逻辑运算符

不应使用按位运算符代替逻辑运算符
EN

Stack Overflow用户
提问于 2017-06-06 10:31:11
回答 2查看 431关注 0票数 0
代码语言:javascript
复制
//  How does this program work with ternary operator
#include <stdio.h>   
int main()
{
    int x = 2, y = 5;
    (x &  y) ? printf("True ") : printf("False "); // How do we get output
    (x && y) ? printf("True ") : printf("False ");
    return 0;
}

这个程序是如何工作的?逻辑运算符和按位运算符是如何工作的?

EN

回答 2

Stack Overflow用户

发布于 2017-06-06 10:47:46

在这个程序中,&是一个按位运算符,它将在2和5上执行按位and操作。

代码语言:javascript
复制
0000 0010<=2
0000 0101<=5
0000 0000<=output

因此,第一行将打印False,而第二行是正常的and运算符,两个值都为真(非零数),因此2 && 5将导致真,输出将为True

票数 3
EN

Stack Overflow用户

发布于 2017-06-06 13:33:41

按位AND运算符是单个“与”符号:&。一个方便的助记符是,布尔AND的小版本&&处理较小的片段(位而不是字节、字符、整数等)。本质上,二进制AND只取二进制形式的数的每个位置的位的逻辑与。

&()的示例:

代码语言:javascript
复制
00000010 & //2
00000101 = //5
--------
00000000   // 0

按位OR的工作方式与按位AND几乎完全相同。唯一的区别是,两位中只有一位需要是1,结果中该位置的位就是1。(如果两位都是1,则结果在该位置也会有1。)符号是一个竖线:|。同样,这类似于布尔逻辑运算符,即||。

|()示例:

代码语言:javascript
复制
00000010 | //2
00000101 = //5
--------
00000111 //7

没有与按位异或相对应的布尔运算符,但有一个简单的解释。异或操作接受两个输入,如果其中一个输入是1,则返回1,但如果两个输入都是1,则不返回1。也就是说,如果两个输入都为1或两个输入都为0,则返回0。使用插入符号^的位异或运算,对每一对位执行异或操作。异或通常缩写为XOR。

^(异或)的示例:

代码语言:javascript
复制
00000010 ^ //2
00000101 = //5
--------
00000111 //7

如果你开始使用按位运算符,我建议你拿一支笔和一张纸,想象两个随机的8位数字,然后把它们都写在纸上(所有的按位运算)。然后你可以找到一个程序员计算器,并检查你的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44380487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档