1字节无符号整数c ++

时间:2012-04-01 17:42:40

标签: c++

我编写了一个名为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];

这会产生不需要的输出。我应该使用哪种数据类型来迭代向量?

5 个答案:

答案 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 另一种是当您为多种不同类型的参数重载函数时。