为什么比较unsigned long和negative number会导致false?

Kai*_*zay 5 c++ c++11

unsigned long mynum = 7;

if(mynum > -1) // false
Run Code Online (Sandbox Code Playgroud)

为什么会这样?是因为-1是一个int,当它被"提升"为unsigned long时,它得到unsigned long的最大值?

Tre*_*cos 3

这可能不正确,但这就是我的想法:
当您执行以下代码时

unsigned long a = -8;
std::cout << a;
Run Code Online (Sandbox Code Playgroud)

由于无符号值不能低于 0,因此在本例中它将返回 unsigned long 的最大值 - 8 或 4294967288。
这就是-1当你的操作中的 转换为 unsigned long 时发生的情况