You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中~(true)的取值及代码逻辑异常原因咨询

问题解释:为什么~abc会导致if分支执行而!abc符合预期

先看你的代码:

// 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;

核心原因是按位取反~和逻辑非!的本质完全不同,结合C语言中bool类型的特性就会出现这个现象:

  • 首先明确:C99的bool是_Bool的别名,true被定义为1,false为0。但_Bool类型有个规则:任何非0值赋值给它,都会被自动转成1(也就是true)。
  • 执行~abc时,abc是bool类型的1,会先触发整数提升,变成int类型的1(32位系统里是0x00000001)。按位取反后得到0xFFFFFFFE,这个值是-2(补码表示),属于非0值。把它赋值给bool类型的bac时,就会被转成1(true)。
  • 此时cba是true,bac也是true,cba && bac结果为true,自然进入if分支打印YES。

而用!abc时,逻辑非操作直接对abc的逻辑值取反:true的逻辑非是false(0),赋值给bac后就是false,cba && bac结果为false,所以走else分支,符合预期。

内容的提问来源于stack exchange,提问作者user2706764

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:07:35