最近当我看到下面的一段程序时,我发现了一个奇怪的现象。
// Write C code here
bool abc = true;
bool cba = true;
bool bac = ~abc;
if(cba && bac)
{
printf("\nYES! %d", bac);
}
else
{
printf("\nNO! %d", bac);
}
return 0;
在上面的程序中,我观察到即使 abc 为 true,if 语句也会被执行,而不是 else。任何解释将不胜感激。
注意:但与“bool bac = !abc;”相同,按预期工作。
C 标准 7.16.3:
剩下的三个宏适合在#if预处理中使用 指令。它们为真,扩展到整数常量 1, false 扩展为整数常量 0,并且
隐式转换适用:
bool abc = true;
bool bac = ~abc;
abc
转换为 int
并具有值 1
~
运算应用于 int
值 1
true
,就像在 C
语言中一样,任何非零值都被视为 true
。bac
被分配了此转换的结果并且它具有值
true