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

uint8_t与取反后uint8_t相等性测试不符合预期的原因

uint8_t取反后比较不相等的原因解析

这是C语言整数提升规则导致的,具体过程如下:

  • uint8_t属于窄整数类型,当参与~这类运算符运算时,会先被提升为int类型(多数系统中int是32位)。
  • 你的num2是uint8_t类型的255(二进制0b11111111),提升为int后变成0x000000FF。
  • 对这个int值取反,得到0xFFFFFF00(十进制-256),这是一个32位的int值。
  • 而num1是uint8_t类型的0,在和取反结果比较时,同样会被提升为int类型的0x00000000。
  • 此时比较的是0和0xFFFFFF00,两者显然不相等,所以程序输出0。

解决方法

要得到预期的比较结果,需要把取反后的结果强制转换回uint8_t,截断高位的无效值:

#include <stdio.h>
#include <stdint.h>

int main(int argc, char ** argv)
{
    uint8_t num1 = 0;
    uint8_t num2 = 255;

    printf("%d\n", num1 == (uint8_t)~num2);
    return 0;
}

这段代码会输出1,符合逻辑预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:14:53