我读到可以使用"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个字节.
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)
这是你应该使用的.