繁体   English   中英

1字节无符号整数c ++

[英]1 byte unsigned integer 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];

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

是的,使用unsigned char

如果<stdint.h>可用,那么您也可以使用uint8_t

不要让标准的编译器类型char混淆你; 以下是完全合法的:

char number[5] = { 1, 4, 3, 6, 2};   // Representation of decimal 14,362

并不是说char类型有什么特别的东西会迫使你把它们想象成字符; 相反,它只是1个字节的方便大小,这使得它们适合保存诸如printf库例程使用它们来保存1字节值的值,它将在合适的编码下解释为字符。

uint_least8_t是用于存储单个十进制数字的最紧凑的数据类型。

如果您的系统支持大小为1字节的数据类型,那么就是这样。 否则它将是可用的下一个最小数据类型。

您可能需要在使用流插入运算符时强制转换值,以确保获得数字输出而不是字符处理。

你在无符号字符上使用cout <<时看到的输出是与std :: ostream一起使用的<<运算符的机制(具体来说,运算符<<的不同重载将以不同的方式显示值) - char / unsigned char重载通常假设你想要一个字符表示而不是数字表示

unsigned char的底层表示仍然是你推入向量的数字 - unsigned char仍然是无符号的1字节整数

如果你想改变输出,那么你需要避免使用为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] );

使用char或unsigned char作为1字节整数类型并不总是那么简单...有时您只需要类型为数字类型,而不是字符类型。 这里有一个这样的例子: 1字节整数数据类型其他是当你为几种不同类型的参数重载函数时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM