使用char作为小整数(C ++)

时间:2012-01-29 17:49:27

标签: c++ integer char

我读到可以使用“char”表示小整数。但是,当我尝试时,

unsigned char A = 4;
std::cout << A << std::endl;

它给出了一个角色,而不是4.

5 个答案:

答案 0 :(得分:18)

您遇到的是运算符重载的影响。 <<运算符假定,当您将字符设为char类型的变量时,您最有可能要打印字符,因此它的行为与您对整数变量的预期不同

根据Vivek Goel的建议,您可以强制编译器选择您真正想要的重载:

unsigned char A = 4;
std::cout << static_cast<unsigned int>(A) << std::endl;

附录:除非您正在处理资源严重受限的环境(尤其是小内存),否则您将在错误的一端进行优化。 unsigned int上的操作通常比unsigned char上的操作快,因为您的处理器无法获取单个字节,但必须至少获得4的倍数并屏蔽其他3个字节。

答案 1 :(得分:6)

operator<<和(std::ostream / signedunsigned执行字符输出的char重载;为了输出字符的整数值,您需要执行强制转换:

std::cout << (int)A << std::endl;

然而,这就是所谓的“旧式”(更具体地说是C风格)演员。 C ++具有更明确,更易于搜索的投射操作符,通常更受欢迎:

std::cout << static_cast<int>(A) << std::endl;

但打字很麻烦;惯用的替代方法是使用+运算符,该运算符将其参数提升为(unsignedint

std::cout << +A << std::endl;

这是你应该使用的。

答案 2 :(得分:4)

应该是

 unsigned char A = 4;
    std::cout << (int)A << std::endl;

答案 3 :(得分:4)

char IS 一个小整数(范围-127到+127),它与整数相同的整数运算。

这里的问题是内部表示(表示-127到+127范围的二进制数)与外部表示之间的概念混淆,通常使输入和输出函数将其表示为“字形”其ASCII码是由它携带的数字“,而对于整数,外部表示是”读取的字符序列,如十进制表示的整数“

将其作为数字打印的最简单方法是将其转换为int,然后将其转换为输出函数(如cout << int(ch)或任何等效的转换形式)

答案 4 :(得分:1)

对于单个对象,代码大小的增加可能会淹没任何存储大小的减少(对齐填充可能需要跟随对象的内存)。除非您需要大量的小整数,否则请使用int