所以基本上我想找到一种更简单的方法:
if(size == 2 || size == 6 || size == 10 || size == 14 || ...) unit /= 2;
所以基本上它从2开始然后检查是否等于之前的大小+4。
我需要达到256。
我想知道是否有一种简单的方法可以做到这一点。
编辑:对不起,我打算在一行中完成所有操作,而不是多行。
答案 0 :(得分:5)
你可以这样做:
if ( size >= 2 && size <= 256 && size % 4 == 2 )
unit /= 2;
答案 1 :(得分:2)
如果它持续增加4,你可以尝试使用module-4:
if ((size - 2) % 4 == 0 && size <= 256){
unit /= 2;
}
或者,如果size
可能是否定的,但应该是肯定的:
if ((size - 2) % 4 == 0 && size >= 0 && size <= 256){
unit /= 2;
}
答案 2 :(得分:1)
您可以使用
在O(1)中对此进行控制if ((size - 2) % 4 == 0){
/*2, 6, 10 etc*/
unit >>= (Math.min(size, 256) + 2) / 4;
}
其中按位移位生成2的幂的适当乘法:用于了解运算符优先级的试金石。
现在问题已经更新,unit
上的操作相当迟钝unit /= 2
,您必须添加新引入的256
大小的上限。 1}}。
答案 3 :(得分:1)
您可以使用switch语句执行以下操作:
<script>
$(function() {
CreateTable(GetSum('#displaytable'));
});
function GetSum(tableIdWithHash) {
var Sum = [];
var EventIds = [];
var EventName = [];
var Data = [];
$(tableIdWithHash).find('.eventCounts').each(function(i){
var Counte = $(this).html();
var Ide = $(this).siblings('.Idevent').html();
var eName = $(this).siblings('.eventNames').html();
allSum.sort(function(a,b){
if(a.eCount > b.eCount){
return 1;
} else if (a.eCount < b.eCount){
return -1;
} else{
return 0;
}
});
if (EventIds.indexOf(Ide) === -1) {
EventIds.push(Ide);
EventName.push(eName);
}
var index = EventIds.indexOf(Ide);
if (Sum[index] == undefined) {
Sum[index] = Number(Counte);
}
else {
Sum[index] += Number(Counte);
}
});
Data.push(EventIds);
Data.push(EventName);
Data.push(Sum);
//"order": [[ 2, "desc" ]]
return Data;
}
</script>
但这仍然很麻烦。另一种选择可能是:
switch(size) {
case 2:
unit /=2;
case 4:
unit /= 2;
....
}
答案 4 :(得分:1)
我只是使用一系列可能的除数。
如果要更改的数字,请将其扩展为class
。
如果存在某种数学进展(例如d[n+1] = d[n] + 4
),则即时得出除数。
int[] divisors = {2, 6, 10};
int doIt(int n, int unit) {
for (int i : divisors) {
if (n == i) {
unit /= 2;
}
}
return unit;
}
答案 5 :(得分:1)
一种神秘的方式:
unit >>= ((size & -253) == 2) ? 1 : 0;
说明:
~255 = 0xffffff00
进行按位AND;如果该值不为零,则超出该范围; number % 4
,请使用3
进行按位AND;将其与2进行比较,看看是否number % 4 == 2
。因此,要检查数字是否满足这两个条件,我们可以使用上面两个位掩码的按位AND计算size
的按位AND:如果满足两个条件,则结果为2。
因此:
(size & (~255 | 3)) == 2 (simplifies to) (size & -253) == 2.