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

关于unsigned int与char执行>、+运算结果的技术疑问

有符号与无符号类型隐式转换导致的结果解析

先贴出你提供的代码:

#include <stdio.h>

int main(void) {
    unsigned int n = 10;
    char m = -1;
    if (m < n)
        printf("m < n\n");
    else
        printf("m > n\n");
    printf("m + n = %u\n", m + n);
    return 0;
}

为什么输出"m > n"?

C语言有明确的类型提升规则:当有符号类型和无符号类型进行比较或运算时,有符号类型会被隐式转换为无符号类型。

这里m是有符号char类型的-1,MinGW64环境中char默认是8位有符号,它的二进制补码是0xff。和unsigned int类型的n比较时,m会被提升为unsigned int类型——8位的0xff扩展到32位就是0xffffffff,这个值作为无符号数是4294967295,远大于n的10,所以条件判断进入else分支,输出"m > n"。

为什么输出"m + n = 9"?

加法运算同样遵循类型转换规则:m被转换为unsigned int的0xffffffff,和n的10相加:
0xffffffff + 10 = 0x100000009
但unsigned int是32位类型,超出32位的部分会被截断(无符号整数溢出属于定义行为,直接取模2^32),最终结果变成0x00000009,也就是十进制的9,所以输出"m + n = 9"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:36:29