我编写了一个名为HugeInteger的类,它可以使用“无限”大小的数字进行算术运算(加,子,乘)。它将数字中的每位数字视为独立数字(例如1234 = 1,2,3和4)。我将这些数字存储在向量(vector<short>)
中。现在,因为每个数字只能取0到9之间的值,所以我真的不需要将它们存储为2字节数字。有没有办法(不使用char)将数字存储为1字节无符号整数?谢谢!
更新
vector<unsigned char> v;
v.push_back(1);
v.push_back(2);
for (size_t i = 0; i < v.size(); i++)
cout << v[i];
这会产生不需要的输出。我应该使用哪种数据类型来迭代向量?
答案 0 :(得分:25)
是的,请使用unsigned char
。
如果<stdint.h>
可用,那么您也可以使用uint8_t
。
答案 1 :(得分:9)
不要让标准编译器类型char
混淆你;以下是完全合法的:
char number[5] = { 1, 4, 3, 6, 2}; // Representation of decimal 14,362
并不是char
类型有什么特别的东西会迫使你把它们想象成字符;相反,它只是1个字节的方便大小,这使得它们适合保存诸如printf
之类的库例程使用它们来保存1字节值的值,它将在合适的编码下将其解释为字符。
答案 2 :(得分:1)
uint_least8_t
是用于存储单个十进制数字的最紧凑的数据类型。
如果您的系统支持大小为1字节的数据类型,那么就是这样。否则它将是可用的下一个最小数据类型。
使用流插入运算符时可能需要强制转换值,以确保获得数字输出而不是字符处理。
答案 3 :(得分:1)
您使用cout&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;在unsigned char上是&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;运算符与std :: ostream一起使用时(具体而言,运算符的不同重载&lt;&lt;将以不同的方式显示值 - char / unsigned char重载通常假设您需要字符表示而不是数字表示)< / p>
unsigned char的底层表示仍然是你推入向量的数字 - unsigned char仍然是无符号的1字节整数。
如果您希望更改输出,则需要避免使用&lt;&lt;的重载。为char或unsigned char设计的运算符 - 最简单的方法是执行转换
vector<unsigned char> v;
v.push_back(1);
v.push_back(2);
for (size_t i = 0; i < v.size(); i++)
cout << static_cast<int>( v[i] );
答案 4 :(得分:0)
使用char或unsigned char作为1字节整数类型并不总是那么简单...有时您只需要类型为数字类型,而不是字符类型。这里有一个这样的例子:1 byte integer data type 另一种是当您为多种不同类型的参数重载函数时。