我有一个包含8个元素的数组:Bin[8]
。
Bin表示范围容器:我收到一个N
号,例如0 <= N <= 255
。
N < 32
==&gt; Bin[0] += 1
32 <= N < 64
==&gt; Bin[1] += 1
我想要一个不需要If-Else
指令的快速解决方案,因为我有多个Bins需要处理。
我使用的是Java,但接受任何编程语言的解决方案。
谢谢。
答案 0 :(得分:2)
确保您的数字N确实为0 <= N <= 255,然后简单地:
Bin[N/32]++;
编辑:另一张海报提到右移5位。这也会有效,但我觉得除以32显示意图更清洁,任何现代编译器都会优化分区,如果它在您正在瞄准的平台上更有效率的话。
答案 1 :(得分:2)
我们可以使用一些按位运算符:
binIndex = N >> 5;
然后
Bin[binIndex]++;
这只是忽略数字的低5位,使用前三位(如果N <= 255)作为二进制数组的索引。
答案 2 :(得分:1)
只需使用整数除法(截断):
Bin[N / 32] += 1;