【发布时间】:2017-10-20 16:29:32
【问题描述】:
假设我有一个字节数组 ID。
稍后我想以这种方式存储数据:
ids[cz << 24 | cx << 16 | y << 8 | z << 4 | x]
cz, cx, y, y, z, x 在这种情况下是 int 值。
那么当我创建数组时需要多长时间? 我以为我必须以这种方式初始化数组:
byte[] ids = new byte[maxCz * maxCx * maxY * maxZ * maxX];
但它总是给我一个 ArrayIndexOutOfBoundsException。
【问题讨论】:
-
不知道
maxCz、maxCx、maxZ或maxX是什么,在这里很难为您提供帮助。 -
它们代表 cz、cx、x、y、z 的最大值。例如:int cx = 7,int cz = 7,x = 16,y = 256,z = 16。
-
会是什么?
-
数组大小必须容纳最大潜在索引值,所以简单版本是
ids[(maxCz + 1) << 24]。复杂版本是ids[(maxCz << 24 | maxCx << 16 | maxY << 8 | maxZ << 4 | maxX) + 1]。在这两种情况下,我都假设最大值包括在内。
标签: java arrays byte byte-shifting