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

Shi*_*bli 13 c++ integer char

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

unsigned char A = 4;
std::cout << A << std::endl;
Run Code Online (Sandbox Code Playgroud)

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

bit*_*ask 18

您遇到的是运算符重载的影响.当您将一个字符变量输出时,<<操作符假定您最有可能想要打印字符char,因此它的行为与您对整数变量的预期不同.

正如Vivek Goel所建议的那样,你可以强制编译器选择你真正想要的重载:

unsigned char A = 4;
std::cout << static_cast<unsigned int>(A) << std::endl;
Run Code Online (Sandbox Code Playgroud)

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


Jon*_*rdy 6

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

std::cout << (int)A << std::endl;
Run Code Online (Sandbox Code Playgroud)

然而,这就是所谓的"老式"(更具体地说是C风格)演员.C++具有更明确,更易于搜索的投射操作符,通常更喜欢:

std::cout << static_cast<int>(A) << std::endl;
Run Code Online (Sandbox Code Playgroud)

但打字很麻烦; 惯用的替代方法是使用+运算符,它将参数提升为(unsigned)int:

std::cout << +A << std::endl;
Run Code Online (Sandbox Code Playgroud)

这是你应该使用的.