首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >max将int (16位)数组设置为short的最大值

max将int (16位)数组设置为short的最大值
EN

Stack Overflow用户
提问于 2013-04-11 19:46:32
回答 9查看 6.3K关注 0票数 7

似乎在任何地方都找不到这个问题的答案,我如何将数组设置为数组类型的最大值?我本以为ZBUFFER是一个16位整数数组时,memset(ZBUFFER,0xFFFF,size)就可以工作了。取而代之的是,我始终得到-1。

此外,我们的想法是让这个工作尽可能快(这是一个zbuffer,需要初始化每一帧),所以如果有更好的方法(仍然一样快或更快),让我知道。

编辑:作为说明,我确实需要一个带符号的整型数组。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-04-11 19:58:44

C++中,您可以使用std::fill和std::numeric_limits。

代码语言:javascript
复制
#include <algorithm>
#include <iterator>
#include <limits>

template <typename IT>
void FillWithMax( IT first, IT last )
{
    typedef typename std::iterator_traits<IT>::value_type T;
    T const maxval = std::numeric_limits<T>::max();
    std::fill( first, last, maxval );
}

size_t const size=32;
short ZBUFFER[size];
FillWithMax( ZBUFFER, &ZBUFFER[0]+size );

这将适用于任何类型。

C中,最好不要使用设置字节值的memset。初始化char以外的其他类型的数组(ev.unsigned),您必须求助于手动for循环。

票数 9
EN

Stack Overflow用户

发布于 2013-04-11 19:49:08

-1 \f25 0xFFFF -1\f6和-1\f25 0xFFFF-1\f6在使用二进制补码表示的16位整数中是相同的。您只能得到-1,因为您已将数组声明为short而不是unsigned short。或者是因为您在输出时将这些值转换为有符号的。

顺便说一句,你认为可以使用memset设置除字节以外的其他东西的假设是错误的。memset(ZBUFFER, 0xFF, size)也会做同样的事情。

票数 7
EN

Stack Overflow用户

发布于 2013-04-11 19:59:05

在C++中,您可以使用std::fill算法为数组填充一些值。

代码语言:javascript
复制
std::fill(ZBUFFER, ZBUFFER+size, std::numeric_limits<short>::max());

这比你当前的方法既不快也不慢。不过,它确实有工作的好处。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15947969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档