具体的规则并不简单,可以去搜索 integral promotion 和 usual arithmetic conversion。
具体到你的例子,简单的来讲,在比较之前要经历 usual arithmetic conversion ,在你这里的第一步就是 integral promotion。
(注意,之一过程无论两侧类型时候相同,都要进行)
经历 integral promotion 之后,搜有的整数类型都至少被转换为 int。在 sizeof(int) > sizeof(short) 的前提下,上面涉及类型的转换结果是:
int -> int
unsigned int -> unsigned int
short -> int
unsigned short -> int
对于 int vs uint ,经过 integral promotion 之后类型仍不相同,需要继续转换,最后 usual arithmetic conversion 选择 unsigned int 作为公共类型。
对于 short vs ushort ,经过 integral promotion 之后类型已经相同(均为 int),usual arithmetic conversion 结束。
===============
所以,int vs uint 进行了无符号比较,
short vs ushort 进行了有符后比较。