C++中"char"类型的限制

Limits of "char" type in C++

本文关键字:char C++ 类型      更新时间:2023-10-16

我想知道是否有任何方法可以找出c++中为int (std::numeric_limits<int>::min())提供的行上的char的限制?

std::numeric_limits<char>::min()应该可以工作。

如果要打印该值,请确保将其转换为整数。这是因为默认情况下,c++ i/o流将8位整数值转换为对应的ASCII值(编辑它们并没有真正这样转换——参见@MSalters的评论)。

代码:

static const auto min_signed_char = std::numeric_limits<char>::min();
std::cout << "char min numerical value: "
    << static_cast<int>(min_signed_char) << "n";

第二次编辑(处理@MSalters的评论):

另外,min_signed_char表示char是有符号的。这是一个错误的假设——char与有符号char或无符号char具有相同的范围。

虽然char具有相同的位大小(一个字节),但它具有不同的范围:

代码:

#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

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