为 ((unsigned int)0-1)>0 返回真

iam*_*brj 0 c++ if-statement

我遇到了一些 C++ 代码,就像

if(((unsigned int)0-1)>0)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)

并且程序执行了 if 块中的语句。出于好奇,我在 c 中尝试了相同的方法,它也做了同样的事情。我的理解是,如果 if 条件中的表达式返回 bool 值 true,则会执行 if 块中的语句。这意味着 ((unsigned int)0-1)>0 必须返回真。为什么会这样?

son*_*yao 5

对于(unsigned int)0-1,的操作数operator-是unsigned int 0和int 1。那么结果的类型(即公共类型)将是unsigned int.

否则,如果无符号操作数的转换等级大于或等于有符号操作数的转换等级,则有符号操作数被转换为无符号操作数的类型。

因为unsigned int,不可能0-1,但是

无符号整数算术总是以2 n为模执行 ,其中 n 是该特定整数中的位数。例如unsigned int,对UINT_MAX加 1给出 ? 0?,并从?0? 中减去 1 给出UINT_MAX。

这意味着if(((unsigned int)0-1)>0)等价于if(UINT_MAX>0),即true。