以下代码尝试获取字符的平均值。 它完美适用于单个字符。但是显示字符的垃圾值
#include<iostream>
template<typename T>
decltype(auto) avgval(T const*beg, T const *end)
{
T total{};
while (beg != end)
{
total += *beg;
std::cout << "Total is " << total << "\n";
++beg;
}
return total;
}
int main()
{
char name1[] = "A";
int len = sizeof(name1) - 1;
std::cout << avgval(name1, name1 + len) / len << "\n";
char name[] = "ABC";
int length = sizeof(name) - 1;
std::cout << "name is " << avgval(name, name + length) / length << "\n";
return 0;
}
输出
Total is A
65
Total is A
Total is â
Total is ╞
name is -19
预期结果必须介于97和122之间(ASCII值)。但是我看到返回的垃圾值。任何解释
答案 0 :(得分:3)
此实例的变量total
的类型为char
。 char
似乎在您的平台上签署了8位数字,其范围为-128~127。
&#34; ABC&#34;的ASCII总和是65 + 66 + 67 = 198
,超出范围。
严格地说,行为是不确定的。但是如果我们认为它是2的补码溢出,则二进制表示将是1100 0110
,而后者又被解释为-58。 rounddown(-58/3) = -19
。