“限制”;char";输入C++; 我想知道,在C++中,有没有一种方法可以看出C++中char的限制是什么?( STD::MultCimultCimult::MINUL[M])/?< /P> STD::MultudioCimult::()应该工作。< /P>

“限制”;char";输入C++; 我想知道,在C++中,有没有一种方法可以看出C++中char的限制是什么?( STD::MultCimultCimult::MINUL[M])/?< /P> STD::MultudioCimult::()应该工作。< /P>,c++,C++,如果要打印该值,请确保将其转换为整数。这是因为默认情况下,C++ I/O流将8位整数值转换为它们的ASCII对应(编辑< /强>它们不真正转换成类似的内容——参见@ MsAlter)。 代码: 也就是说,虽然范围大小相同(8位),但范围本身确实取决于符号。um标准::数值限制::最小()。。。与int完全相同。流式传输字符显示其字符值,而不是其数值。您应该将结果转换为int以查看数值。这是一个很大的否决票。。。我真的不明白为什么。@Mankarse但还有一个问题-因为对于char它也会返回一个c

如果要打印该值,请确保将其转换为整数。这是因为默认情况下,C++ I/O流将8位整数值转换为它们的ASCII对应(<强>编辑< /强>它们不真正转换成类似的内容——参见@ MsAlter)。

代码:


也就是说,虽然范围大小相同(8位),但范围本身确实取决于符号。

um<代码>标准::数值限制::最小()。。。与
int
完全相同。流式传输字符显示其字符值,而不是其数值。您应该将结果转换为
int
以查看数值。这是一个很大的否决票。。。我真的不明白为什么。@Mankarse但还有一个问题-因为对于
char
它也会返回一个
char
,我可以理解为什么初学者可能会问这个问题,即使是“最少”的研究努力。我已经投票决定从负数中减去(并添加了一个答案):该函数显示了一个有效的混淆源@Mankarse,std::numeric_limits的实现中没有任何东西会向初学者表明“注意如何使用io流显示字符值”。这个问题并没有“显示研究的努力”——只是缺乏对C++标准库的特殊性的经验。不,流不会像这样转换。他们将使用ASCII码页、ASCII超集或完全不同的代码页,将
char
表达式转换为具有相同值的字符。要了解原因,请检查
std::cout
static const auto min_signed_char = std::numeric_limits<char>::min();
std::cout << "char min numerical value: "
    << static_cast<int>(min_signed_char) << "\n";
#include <limits>
#include <iostream>

int main(int argc, char* argv[])
{
std::cout << "min char: "
           << static_cast<int>(std::numeric_limits<char>::min()) << "\n";
std::cout << "min unsigned char: "
           << static_cast<int>(std::numeric_limits<unsigned char>::min()) << "\n";
}
min char: -128
min unsigned char: 0