为了找出标准8位字符的整数值范围,我运行了以下代码:
int counter = 0;
for (int i = -300; i <= 300; i++)
{
char c = static_cast<char> (i);
int num = static_cast<int> (c);
if (num == i)
{
counter ++;
}
else
{
cout << "Bad: " << i << "\n";
}
}
cout << "\n" << counter;
我最终看到计数器的值为256,这是有道理的。但是,在&#34; Bad&#34;的列表中数字(即字母不存储的数字),我发现最大的坏负数是-129,而最小的坏正数是128.
从这个测试来看,似乎chars只存储-128到127的整数值。这个结论是正确的,还是我错过了什么?因为我总是认为字符存储的整数值从0到255。
答案 0 :(得分:1)
虽然大多数情况下都定义了实现 - 是的,这是正常的,因为您的实现将char
定义为signed char
。您可以使用CHAR_MIN
和CHAR_MAX
宏来打印char
类型的最小值和最大值:
#include <iostream>
#include <cstdint>
int main() {
std::cout << CHAR_MIN << '\n';
std::cout << CHAR_MAX << '\n';
}
或使用std::numeric_limits课程模板:
#include <iostream>
#include <limits>
int main() {
std::cout << static_cast<int>(std::numeric_limits<char>::min()) << '\n';
std::cout << static_cast<int>(std::numeric_limits<char>::max()) << '\n';
}
对于unsigned char
类型的0..255范围。最小值为0
,最大值应为255
。它可以使用以下方式打印出来:
std::cout << UCHAR_MAX;
可以通过以下方式检查类型是否已签名:
std::numeric_limits<char>::is_signed;
摘自char type参考:
char
- 字符表示的类型,可以是最多的 在目标系统上有效地处理(具有相同的 表示和对齐为signed char
或unsigned char
,但始终是不同的类型。)