【问题标题】:The bitwise operators should not be used in place of logical operators不应使用位运算符代替逻辑运算符
【发布时间】:2017-11-06 21:48:12
【问题描述】:
//  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;
}

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

【问题讨论】:

标签: c bitwise-operators ternary-operator


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    &(和)的示例:

    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
    

    如果您使用按位运算符,我建议您准备笔和纸,想象 2 个随机 8 位数字并将它们全部放在纸上(所有按位运算)。然后你可以找到一个程序员计算器并查看你的结果。

    【讨论】:

    • 没问题,如果您需要更多帮助,请不要犹豫。我将非常乐意为您提供帮助。此外,如果您发现我的回答有帮助,如果您支持/接受我的回答,我将不胜感激。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2020-01-23
    相关资源
    最近更新 更多