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

C++对bool类型使用~按位取反运算符的代码执行结果疑问

执行结果为A的原因

核心是C++的整型提升规则、按位非运算特性和布尔判断规则共同作用的结果,分步骤解释如下:

  • 第一步:bool类型参与运算时的整型提升
    C++中bool属于小整型,在执行~(按位非)这类算术运算前,会先被提升为int类型:
    x是值为true的bool变量,对应的整数值为1,提升为int后值为1(32位有符号int的补码表示为0x00000001)。
  • 第二步:按位非运算的计算结果
    对int类型的1做按位非运算,会将每一位二进制位取反,得到0xFFFFFFFE,这个值作为有符号int的补码,对应十进制数值为-2,和你测试输出的~x: -2结果一致。
  • 第三步:if条件的布尔判定规则
    C++中if条件判断时,所有非0的整数都会被判定为true,只有0会被判定为false。-2是非0值,因此~x对应的布尔结果为true。
  • 第四步:逻辑或的短路规则
    ||是逻辑或运算符,只要左操作数为true,就会直接返回true,不会再计算右操作数y(即便y为false也不影响最终结果)。因此整个~x || y的判定结果为true,进入part A分支。

常见误区说明

你之前的误解是混淆了**按位非~和逻辑非!**的作用:

  • !x才是对bool值的逻辑取反,!true的结果是false,如果把代码里的~x换成!x,就会执行B分支。
  • ~是按位运算,不会直接对bool值做逻辑取反,需要先做整型提升再按位计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:00:00