环境中 ~(true) 的值是多少?并需要答案理由

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

最近当我看到下面的一段程序时,我发现了一个奇怪的现象。

// 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 bitwise-operators
1个回答
0
投票

C 标准 7.16.3:

剩下的三个宏适合在#if预处理中使用 指令。它们为真,扩展到整数常量 1, false 扩展为整数常量 0,并且

隐式转换适用:

bool abc = true;
bool bac = ~abc;
  1. abc
    转换为
    int
    并具有值
    1
  2. ~
    运算应用于
    int
    1
  3. 结果 - 非零被转换回布尔值 - 并且它具有值
    true
    ,就像在
    C
    语言中一样,任何非零值都被视为
    true
  4. bac
    被分配了此转换的结果并且它具有值
    true
© www.soinside.com 2019 - 2024. All rights reserved.