C语言 表达式x &&(~x)应该返回1还是0?它依赖于编译器吗?

kqhtkvqz  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(101)

在C中,给定“short x = 0xFFF 0”,“x &&(~x)"的输出是什么。这个问题是在一次测验中向我提出的,答案是0。尽管编译时返回1(true)。为什么?

int main()
{
    short x = 0xFFF0;
    printf("%X\n", x && (~x));
    return 0;
}

字符串
我所知道的是“x = 0xFFF 0”和“~x = 0x 000 F”。当我们做“逻辑与”时,它的1 && 1返回1(真)。然而,教授认为“按位与”应该先做0xFFF 0 & 0x 000 F = 0x 0000,这是0(假)。这是过时的编译器的问题还是无法解释的问题?

ezykj2lf

ezykj2lf1#

C17 §6.5.13 3:
&&运算符如果两个操作数比较都不等于0,则结果为1;否则,结果为0。结果类型为int
&&是逻辑AND运算符。顾名思义,它执行逻辑AND运算。

  • x是非零值(真值),并且
  • ~x是非零值(真值),因此
  • x && (~x)返回1(真值)。

如果你的教授陈述了你所说的他们所做的,他们就错了。他们可能在谈论if ( x & (~x) )吗?

u0sqgete

u0sqgete2#

让我们一部分一部分地看x && (~x)

  • x本身不为零,因此在使用逻辑&&(AND)时,在布尔上下文中将计为true
  • ~x本身也不为零,所以true
  • true && truetrue
#include <stdbool.h>
#include <stdio.h>

int main() {
    short x = 0xFFF0;
    
    printf("%s\n", x != 0 ? "true" : "false");         // true
    printf("%s\n", ~x != 0 ? "true" : "false");        // true
    printf("%s\n", true && true ? "true" : "false");   // true
}

字符串

相关问题