2017-06-06 184 views
0
// 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; 
} 

此程序如何工作? 逻辑运算符和位运算符如何工作?不应使用按位运算符来代替逻辑运算符

+0

输出:False和True –

+0

相关,[条件语句使用按位运算符](https://stackoverflow.com/q/10034470/608639)和[条件语句如何使用按位运算符?](https: //stackoverflow.com/q/13054401/608639) – jww

+0

@manjunathhiremath是你的问题解决? –

回答

3

在这个程序&是位运算符将做2和5

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

逐位and操作,从而在第一线将打印False, 而第二个是正常and操作者为其中两个值是真的(非零数字),因此2 && 5将导致正确,输出将为True

+0

@ Vishwajeet Vishu怀疑已被清除。谢谢 –

+0

@manjunathhiremath欢迎您接受我的回答 –

0

按位AND运算符是单个&符号:&。一个方便的助记符是布尔AND的小版本在较小的部分(位,而不是字节,字符,整数等)上工作。本质上,二进制AND只是以二进制形式将数字的每个位置中的位进行逻辑AND。

举例&():

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

位或工作几乎完全的方式按位与相同。唯一的区别是,结果中只有两个比特中的一个比特需要为1(如果两个比特都是1,那么结果在该位置也会有1)。符号是一个管道:|。再次,这与布尔逻辑运算符类似,即||。

示例| (OR):

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

没有布尔运算符对口按位异或,但有一个简单的解释。如果两个输入中的任何一个或另一个输入是1,则异或操作取两个输入并返回1,但如果两者都不相同则返回1。也就是说,如果两个输入都是1或两个输入都是0,则返回0.按位异或 - 对于^符号的操作符^,对每对位执行异或运算。独占 - 或通常缩写XOR。

举例^(XOR):

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

如果你进入一个按位运算符我建议你一支笔和纸,想象2个随机8位数字和工作他们都起来在纸上(所有按位操作)。然后你可以找到一个Programmer计算器并检查你的结果。

+0

谢谢....... –

+0

没问题,如果您需要更多帮助请不要犹豫问。我会超过很高兴为您提供帮助。此外,如果您发现我的答案有帮助,我会大大apreciate如果你upvote /接受我的答案。谢谢。 – du4ko