在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(真).然而,教授的 idea 与此不同,他指出,应该首先执行0xFFF0&0x000F=0x0000,这是0(FALSE).这是一个过时的编译器的问题还是无法解释的问题?

推荐答案

让我们来逐个部分地看一下x && (~x)个.

  • x本身不是零,因此在布尔上下文中将被视为true,就像使用逻辑&&(AND)时一样.
  • ~x本身也不是零,所以true.
  • 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
}

C++相关问答推荐

为什么海湾合作委员会在共享对象中的. init_data的虚拟内存地址之前留出一个空白

位屏蔽对于无符号转换是强制的吗?

C中的__attributor__((aligned(4),packed))与 struct 的用法

如何创建由符号组成的垂直结果图形?

将整数的.csv文件解析为C语言中的二维数组

为什么C语言允许你使用var =(struct NAME){

Rust FFI--如何用给出返回引用的迭代器包装C风格的迭代器?

Clang警告称,`ffi_type`与`sizeof`不兼容

一旦运行长度超过2,编译器是否会优化";strnlen(mystring,32)>;2";以停止循环?

#定义SSL_CONNECTION_NO_CONST

如何在GET_STRING输入后对少数几个特定字符串进行C判断?

如何仅使用软件重新初始化STM32微控制器中的USB枚举?

MacOS下C++的无阻塞键盘阅读

我应该在递归中使用全局变量吗

为四维数组中的Dim-1和Dim-3重新分配空间

我可以创建适用于不同endian的 colored颜色 struct 吗?

具有正确标头的C struct 定义问题

如何在Rust中处理C的longjmp情况?

C 程序不显示任何输出,但它接受 CS50 Lab1 的输入问题

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?