如何计算 unsigned char 数组中元素的平均值?

发布于 2024-10-16 21:02:09 字数 88 浏览 6 评论 0原文

我有一个快速的问题,但我在网上找不到任何东西。

如何计算 unsigned char 数组中元素的平均值? 或者更类似的是,对无符号字符执行操作?

I've got a quick and I am assuming question but I have not been able to find anything online.

How to calculates the average of elements in an unsigned char array?
Or more like it, perform operations on an unsigned char?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

极致的悲 2024-10-23 21:02:09

C++03 和 C++0x:

#include <numeric>

int count = sizeof(arr)/sizeof(arr[0]);
int sum = std::accumulate<unsigned char*, int>(arr,arr + count,0);
double average = (double)sum/count;

在线演示:http://www.ideone.com/2YXaT


仅 C++0x(使用 lambda)

#include <algorithm>

int sum = 0;
std::for_each(arr,arr+count,[&](int n){ sum += n; });
double average = (double)sum/count;

在线演示:http://www.ideone.com/IGfht

C++03 and C++0x:

#include <numeric>

int count = sizeof(arr)/sizeof(arr[0]);
int sum = std::accumulate<unsigned char*, int>(arr,arr + count,0);
double average = (double)sum/count;

Online Demo : http://www.ideone.com/2YXaT


C++0x Only (using lambda)

#include <algorithm>

int sum = 0;
std::for_each(arr,arr+count,[&](int n){ sum += n; });
double average = (double)sum/count;

Online Demo : http://www.ideone.com/IGfht

少女净妖师 2024-10-23 21:02:09

算术运算在 unsigned char 上工作得很好,尽管您有时可能会对 C 中的算术总是提升为 int 这一事实感到惊讶。

在C++的标准模板库中,

#include <numeric>
template<class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T init);

要计算unsigned char arr[]的总和,可以使用accumulate(arr, arr + sizeof(arr) / sizeof(arr[0]), 0 )。 (这里 0 是 int。您可能会发现使用不同的类型更合适。)

如果没有 STL,则可以通过循环轻松计算。

平均值是总和除以长度 (sizeof(arr) / sizeof(arr[0]))。

Arithmetic operations work just fine on unsigned char, although you may occasionally be surprised by the fact that arithmetic in C always promotes to int.

In C++'s Standard Template Library,

#include <numeric>
template<class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T init);

To calculate the sum of unsigned char arr[], you may use accumulate(arr, arr + sizeof(arr) / sizeof(arr[0]), 0). (0 is an int here. You may find it more appropriate to use a different type.)

Without STL, this is trivially computed with a loop.

The average is the sum divided by the length (sizeof(arr) / sizeof(arr[0])).

路还长,别太狂 2024-10-23 21:02:09

与其他任何事情一样,您将它们相加并除以计数。为了避免溢出,您通常需要在进行数学计算时将它们转换为更大的值。如果(这是常见的)您想要浮点结果,您也需要在浮点上进行所有数学运算。

About like with anything else, you add them up and divide by the count. To avoid overflow, you'll typically want to convert them to something larger while you're doing the math. If (as is common) you want a floating point result, you'll want to do all the math on floating point as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文