字符的平均值

时间:2017-10-31 05:25:31

标签: c++

以下代码尝试获取字符的平均值。 它完美适用于单个字符。但是显示字符的垃圾值

#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值)。但是我看到返回的垃圾值。任何解释

1 个答案:

答案 0 :(得分:3)

此实例的变量total的类型为charchar似乎在您的平台上签署了8位数字,其范围为-128~127。

&#34; ABC&#34;的ASCII总和是65 + 66 + 67 = 198,超出范围。

严格地说,行为是不确定的。但是如果我们认为它是2的补码溢出,则二进制表示将是1100 0110,而后者又被解释为-58。 rounddown(-58/3) = -19