在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(假)。这是过时的编译器的问题还是无法解释的问题?
2条答案
按热度按时间ezykj2lf1#
C17 §6.5.13 3:
&&
运算符如果两个操作数比较都不等于0,则结果为1;否则,结果为0。结果类型为int
。&&
是逻辑AND运算符。顾名思义,它执行逻辑AND运算。x
是非零值(真值),并且~x
是非零值(真值),因此x && (~x)
返回1
(真值)。如果你的教授陈述了你所说的他们所做的,他们就错了。他们可能在谈论
if ( x & (~x) )
吗?u0sqgete2#
让我们一部分一部分地看
x && (~x)
。x
本身不为零,因此在使用逻辑&&
(AND)时,在布尔上下文中将计为true
。~x
本身也不为零,所以true
。true && true
是true
:字符串