为什么4294967295(32位的最高数字)等于-1
Why does 4294967295 (the highest number at 32bit) equal -1?
我的代码中有一个简单的部分:
int pch = name.find("#");
if(pch == name.npos) continue;
当在name.find
中找不到"#"
时,pch
等于-1。如果我打印的话,name.npos
是4294967295。为什么在这种情况下,当pch
为-1,name.npos
为4294967295
时,程序进入if
条件?
string::npos
表示没有找到该位置。它通常用一个常数值-1
来表示
参考
该常数的定义值为-1,因为size_t是一个无符号整数类型,所以它是该类型可能表示的最大值。
- 如果
find
不成功,则返回-1
因此,在您的情况下,两者是相等的,并且满足if
。
现在,回答
name.npos
,如果我打印它,则为4294967295
因为string::npos
是size_t
类型,通常是typedef
到unsigned
类型。用于初始化unsigned
类型的-1
将被存储为并打印最大可能的无符号值。
因为负数的内部表示。这被称为二者的补码。
相关文章:
- 在数字之间插入 + 或 - 符号以使其等于整数
- 找到数字和等于N的最小幸运数字
- 找到 x^n 的所有组合,并检查它们的总和是否等于一个不包括相同数字的数字
- 从小于或等于某个 N 的数字列表中最小化或找到 n 个理想的子集和
- 你怎么编码,如果x不等于一个数字,程序就会退出
- 计算路径根到节点的总和等于一定数字的数量
- 异因图的总和等于给定的数字
- 如何获取C编译器#Error如果大小(struct ..)不等于给定的数字
- 我怎样才能从 n 得到一个提高到自身等于 n 的幂的数字?
- 给定一个数字n,打印序列中大于或等于n的第一个数字
- 我无法理解方程式的解决方案,该方程式说找到了最小的数字,因此x plus y等于x bitwise或y
- 数组中 4 个数字的总和等于一个特定数字
- 如何使变量等于函数返回的数字
- 如何从 9 和 90 中提取 2.9 和 2.09,即获取数字等于最大编号的小数部分.二分位数之后的数字
- 如果第一个小数点大于或等于 5,如何对数字进行 +1
- C++循环,直到随机生成等于某个数字
- 计算数字x的位数,其数字和等于x*m的数字和
- 在小于或等于目标的数组中查找最大的数字
- 以这样的方式填充数组,使每个元素等于两个数字的最小和
- 给定一个整数数组,找出两个数字,使它们加起来等于一个特定的目标数