C编译器如何处理-10u?

Mun*_*y V 0 c

#include<stdio.>

int main() {
    signed x;
    unsigned y;

    x = 10 +- 10u + 10u +- 10;
    y = x;
    if(x==y)
        printf("%d %d",x,y);
    else if(x!=y)
        printf("%u  %u",x,y);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我无法理解上述程序的流程.请解释编译器如何-10u视为默认值.从我的理解10u是无符号的,但在这个程序中它自动将其转换为-10.

http://www.cquestions.com/2012/02/data-type-questions-in-c.html,问题编号.3.

AnT*_*AnT 6

-10u是应用于常量10u类型的"一元减号"运算符unsigned int.结果是-10在unsigned int类型域中表示的值.根据无符号算术的规则,最终结果将等于UINT_MAX + 1 - 10并且将具有类型unsigned int.