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

时间:2017-06-06 02:31:11

标签: c bitwise-operators ternary-operator

//  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;
}

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

2 个答案:

答案 0 :(得分:3)

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

0000 0010<=2
0000 0101<=5
0000 0000<=output

所以第一行会打印False, 而第二个是普通and运算符,两个值都为真(非零数字),因此2 && 5将导致为true,输出将为True

答案 1 :(得分:0)

按位AND运算符是单个&符号:&amp;。一个方便的助记符是布尔AND和&amp;&amp;的小版本适用于较小的部分(比特而不是字节,字符,整数等)。本质上,二进制AND只是以二进制形式获取数字每个位置的位的逻辑AND。

&amp; ():

00000010 & //2
00000101 = //5
--------
00000000   // 0

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

|的示例():

00000010 | //2
00000101 = //5
--------
00000111 //7

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

^( XOR )的示例:

00000010 ^ //2
00000101 = //5
--------
00000111 //7

如果你进入一个按位运算符,我建议你得到一支笔和纸,想象两个随机的8位数字并将它们全部写在纸上(所有按位操作)。然后你可以找到一个程序员计算器并查看你的结果。