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

C++中逻辑等价的比较运算返回不同bool值是什么原因?

问题根因:C/C++无符号整数隐式转换规则
  • 首先明确类型规则:size_t是C++标准定义的无符号整数类型,你代码里的node->size、变量size、sizeof运算符的返回值全部是size_t类型。
  • 计算node->size - size - sizeof(MallocMetadata)时,所有操作数都是无符号整数,运算过程不会自动转换为有符号类型,最终表达式的返回值也是size_t类型:你看到的-48本质是无符号整数溢出回绕后的超大正数值,远大于128,所以直接做< 128比较时结果为false,对应test变量的取值。
  • 你把运算结果赋值给int类型的tmp_res时,无符号的超大值被强制转换为有符号int,还原出了-48的结果,此时有符号数和128比较的结果符合预期,对应test1变量的取值。

如果要避免这类问题,运算前先把无符号值强制转换为范围足够的有符号类型即可,示例修复代码:

bool test = (static_cast<long long>(node->size) - static_cast<long long>(size) - static_cast<long long>(sizeof(MallocMetadata))) < 128;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 05:36:05