似乎无法在任何地方找到答案,如何将数组memset到数组类型的最大值?我原以为memset(ZBUFFER,0xFFFF,size)ZBUFFER是一个16位整数数组.相反,我得到-1s.
此外,我们的想法是尽可能快地完成这项工作(这是一个需要初始化每一帧的zbuffer),所以如果有更好的方法(并且仍然快速或更快),请告诉我.
编辑:作为澄清,我需要一个签名的int数组.
在C++中,您将使用std :: fill和std :: numeric_limits.
#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 );
Run Code Online (Sandbox Code Playgroud)
这适用于任何类型.
在C中,你最好不要memset设置字节值.要初始化除char(ev.unsigned)之外的其他类型的数组,您必须使用手动for循环.
-1和0xFFFF在使用二进制补码表示的16位整数中是相同的.你只得到-1,因为你已经声明了你的数组short而不是unsigned short.或者因为您在输出值时将值转换为signed.
顺便说一句你的假设是你可以使用memset 设置除字节之外的东西是错误的.memset(ZBUFFER, 0xFF, size)会做同样的事情.
| 归档时间: |
|
| 查看次数: |
4570 次 |
| 最近记录: |