理解无符号数的行为

Inv*_*tus 2 c c++ unsigned

我的目标是有一个unsigned int值的排序升序列表,我用它sub_func来选择哪一个更大.

sub_func回报是int因为我想比较哪一个是更大的所有数字,它工作正常,但是,我有一个问题,当我定义unsigned int类型是的最大值(0xffffffff == -1).我想更多地了解这里的无符号数字.我该如何解决这个问题?

我有以下代码:

#define p_max (0xffffffff)
uint32 a = p_max;
uint32 b = 20;

int sub_func(uint32 a, uint32 b) 
{
    return (b - a);
}
Run Code Online (Sandbox Code Playgroud)

后退是21,我希望它是20 - MAX,这将是负数,我的返回类型是负数.

但是,我认为它总是一个正数.我不想要的,如何解决这个问题?

Bat*_*eba 5

(假设uint32是32位无符号整数类型).

b - a是一个带有类型的表达式,uint32因为两个操作数都属于该类型.由于标准定义的环绕行为uint32,它的值为21.

您将其分配给int类型,因此返回值.