为什么4294967295(32位的最高数字)等于-1?

时间:2015-07-06 13:12:31

标签: c++

我的代码中有这么简单的部分:

int pch = name.find("#");
if(pch == name.npos) continue;

name.find中找不到"#"时,pch等于-1。 name.npos,如果我打印它,则为4294967295.为什么在这种情况下,当pch为-1且name.npos4294967295时,程序会输入{ {1}}条件?

2 个答案:

答案 0 :(得分:6)

  • string::npos表示找不到位置。它通常由-1的常量值表示。

Reference

  

此常量定义为值-1,由于size_t是无符号整数类型,因此它是此类型的最大可表示值。

  • 如果find不成功,则返回-1

所以,两者都是平等的,在你的情况下,if就满足了。

现在,回答

  

name.npos如果我打印它,则为4294967295

因为string::npos属于size_t类型,通常为typedefunsigned类型。用于初始化-1类型的unsigned将存储为the maximum possible unsigned value并打印。

答案 1 :(得分:3)

由于负数的内部表示。这称为two's complement