我正在尝试根据变化范围将0..2 ^ 12之间的所有数字分成4个存储桶。
例如,我有[0,1000,2100,4000,4096],所以我有4个存储桶:[0-1000],[1000-2100],[2100-4000],[4000-4096]。
我该如何构建一个将每个数字放入正确数字的函数-无需if,不区分大小写等。
我需要一些非常有效的东西,所以我正在寻找按位运算,或者加减运算,然后按位运算。
答案 0 :(得分:3)
输入格式为[0,a,b,c,4096]。如果您不介意预先计算,则可以使用建议的数组。否则,您可以按照以下假设进行类似的操作:
3-((n-a)>> 31)-((n-b)>> 31)-((n-c)>> 31)
想法是,如果数字变为负数,则将设置最高位,并将其移位31位,您将得到1。
您也可以将3个减法表达式相加得到4个存储桶,但是第0个存储桶包含的数字最多。