首页 文章

逻辑运算符

提问于
浏览
0

我遇到了一个答案,我似乎无法弄清楚为什么它是正确的 .

因此有两个int变量x和y,它们分别代表0x66和0x39 .

问题是基于表达式的结果值是什么 .

x && y is apparently 0x01 (1)
x || y is 1
!x || !y is 0
x && ~y is 1

从我的想法来看,我认为只要一个论证不是零就认为是真的 . 因此只要x和y是一些非零值,那么&&运算符就会产生1,当然只要其中一个是真的||运营商会产生1 .

那么为什么第三个问题为0?是个 !与bitwise~运算符不同?所以原来x是二进制的0101 0101,因为它不是零,在逻辑意义上它是真的,但是!它会是假的,还是它的数字的补码所以它的1010 1010?

4 回答

  • 1

    根据我的想法,我认为只要一个论点不为零就认为是真的 . 因此只要x和y是一些非零值,那么&&运算符就会产生1,当然只要其中一个是真的||运营商会产生1 .

    这都是正确的 .

    So why is the third question 0? Is the ! different from the bitwise ~ operator?
    

    是 . 这是合乎逻辑的 . 就像其他逻辑运算符 &&|| 一样,它只关心变量是否具有非零值 .

    !0 将产生 1 .

    !non_zero 将产生 0 .


    请注意,C中的所有逻辑运算符都是 int 而不是 bool ,因为丑陋的向后兼容性保留在C具有布尔类型之前 . 在C和其他类C语言中,逻辑运算符总是产生类型 bool .

    类似地,C中的 truefalse 实际上只是扩展为整数 10 的宏 . 在其他语言中,它们是关键字和布尔常量 .

  • 0

    布尔结果总是为true或false,而在C中,true由 1 表示,false由 0 表示 .

    逻辑非运算符 ! 给出布尔结果,即 10 . 因此,如果表达式为"true"(即非零),则在该表达式上应用 ! 将使其为假,即 0 .

    在您的示例中,您有 !x || !y . 首先评估 !x ,它的计算结果为false,导致 !y 被评估,并且它也计算为false,因此while表达式变为false,即 0 .

  • 0

    是的, ! 与按位不同 ~ 不同 . 这是合乎逻辑的 . 它产生0或1 .

  • 0

    〜(0x01)将为0x10,而!(0x01)将为0x00

    '〜'是一个按位运算符 . '!'是一个逻辑运算符 .

相关问题