表达式 x && (~x) 应该返回 1 还是 0?它取决于编译器吗?

问题描述 投票:0回答:2

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

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

我所知道的是“x = 0xFFF0”和“~x = 0x000F”。 当我们执行“逻辑与”时,它的 1 && 1 返回 1(真)。然而,教授却不这么认为,他说应该先进行“按位与” 0xFFF0 & 0x000F = 0x0000,即 0(假)。这是过时的编译器的问题还是无法解释的问题?

c bitwise-operators conditional-operator
2个回答
1
投票

C17 §6.5.13 ¶3:

如果

&&
运算符的两个操作数比较不等于 0,则其结果为 1;否则,结果为 0。结果类型为
int

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

0
投票

让我们一点一点地看

x && (~x)

  • x
    本身不为零,因此在使用逻辑
    true
    (AND) 时,在布尔上下文中将计为
    &&
  • ~x
    本身也不为零。
  • true && true
    true
    :
#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
}
© www.soinside.com 2019 - 2024. All rights reserved.