我应该在 stoi() 函数中放入多少位
how many bits I should put in stoi() function
以下代码将使程序崩溃:
string test="b1";
unsigned __int8 t1 = stoi(test, 0, 8);
但是'b1'=177,对于8位来说应该没问题,对吧?,如果我使用
string test="b1";
unsigned __int8 t1 = stoi(test, 0, 16);
一切看起来都很好,为什么需要为"B1"使用 16 位?
更复杂的情况是 16 位会让它正确,但 32 位会让它出错!!
string test="0800";
unsigned __int16 t1 = stoi(test, 0, 16);
std::stoi
的第三个参数与任何位数无关。 它是表示数字的基数。
2
表示二进制,8
表示八进制,10
表示十进制,16
表示十六进制,等等,一直到36为基数。 0
表示从前缀确定基数:以 "0x"
或 "0X"
开头的字符串被解释为十六进制,以 "0"
开头的字符串被解释为八进制,所有其他字符串被解释为十进制。
当您调用 std::stoi("b1", 0, 8)
时,std::stoi
将抛出std::invalid_argument
异常,因为 b
不是 base-8 中的有效数字,并且如果未捕获该异常,您的程序将崩溃。
std::stoi("0800", 0, 16)
和 std::stio("0800", 0, 32)
都是完全有效的,但当然 80016 和 80032 表示不同的数字,因此两个调用将返回不同的结果。
基
数 8 正好有 8 个不同的数字。有效数字如下:
0
1
2
3
4
5
6
7
请注意,b
不是以 8 为基数的有效数字。只有大于或等于 12 的基数才具有数字b
。
如果我使用
unsigned __int8 t1 = stoi(test, 0, 16);
一切看起来都还行
16 大于或等于 12。 b
是以 16 为基数的有效数字。
相关文章:
- 函数的时间复杂度是多少?
- 这个递归函数有什么作用?运行时的复杂性是多少?
- 此print_star函数的运行时复杂度是多少?
- 在 C++ 中,默认情况下构造函数为类的数据成员提供的值是多少?
- 在本征C++中 MKL 的函数"zgges"等价物是多少?
- 从 long 转换C++位集构造函数的复杂性是多少?
- 我的 sumASCII 函数中的此偏移量是多少?
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 导出函数中有多少下划线('_')(C++
- 我能知道我的函数有多少参数吗?
- 如果函数按值传递并按值返回,将调用复制构造函数多少次
- 如何创建一个递归函数来显示有多少元音具有输入
- 我应该在 stoi() 函数中放入多少位
- 复制构造函数被调用了多少次?
- 此函数调用了多少次
- 如果类没有任何成员变量,则通过临时对象调用类的成员函数的开销是多少?
- C++中的类/函数模板占用了我的二进制文件的百分比是多少?
- 需要为派生类指定多少个构造函数
- 遇到异常时给定函数的返回值是多少
- 缺少返回语句的非 void 函数的返回值是多少?