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

Loc*_*ero 1 c++

我有这个代码的简单部分:

int pch = name.find("#");
if(pch == name.npos) continue;
Run Code Online (Sandbox Code Playgroud)

当in name.find未找到时"#",pch等于-1.name.npos相反,如果我打印出来,是4294967295为什么在这种情况下,如果pch是-1,name.npos4294967295,程序进入if状态?

Sou*_*osh 8

  • string::npos表示找不到位置.它通常用常数值表示-1.

参考

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

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

所以,两者是平等的,在你的情况下,并且if满意.

现在,回答

name.npos 相反,如果我打印它,是4294967295

因为,string::npos是类型的size_t通常是typedefunsigned类型.的-1,它被用来初始化一个unsigned类型将被存储为打印和最大可能的无符号值.

  • 一个有趣的规范,正式平台可以使用一个补码,两个补码或有符号幅度,并且有符号到无符号的转换是未定义的.只有在二进制补码中,-1的位模式也是最大的无符号值. (4认同)