查看int 44 - 我需要Math.CEIL (log(2) 44)
个二进制位来表示44
。
(答案是6个地方)
6个地方:
___ ___ ___ ___ ___ ___
32 16 8 4 2 1
但是如何检查(例如)是否检查了8
的位?
一个简单的解决方案是:
((1<<3) & 44)>0
所以这将检查该位是否已设置。
但请注意,在幕后,计算机会将44
转换为二进制表示,并检查是否通过按位操作设置了位。
另一种解决方案是在循环中通过toString(2)
或mod%2
自行构建二进制文件
问题
数学 通过哪个公式,我可以测试是否设置了n'th
位?
(我更喜欢非循环操作,但纯单个数学短语)
答案 0 :(得分:3)
基础 base <中值 val 中索引编号 index 的'bit'(实际上是任何 base)值/ em>通常可以计算为
val = 1966;
index = 2;
base = 10;
alert (Math.floor(val/Math.pow(base,index)) % base);
结果:9
val = 44;
index = 3;
base = 2;
alert (Math.floor(val/Math.pow(base,index)) % base);
结果:1
(此处只能0
和1
- 范围始终为0..base-1
)。
Math.floor
(强制转换为Javascript中的整数)和Math.pow
的组合在这里有点不对。即使在整数范围内,Math.pow
也可能会生成一个低于预期“整数”的浮点数 。也许总是添加一个小常数更安全:
alert (Math.floor(0.1+val/Math.pow(base,index)) % base);
答案 1 :(得分:2)
除以要检查的位的值
并测试是否设置了第一位(可以使用x mod 2 == 1
进行测试)
数学表达式:
floor(value/(2^bitPos)) mod 2 = 1
作为JS功能:
function isSet(value, bitPos) {
var result = Math.floor(value / Math.pow(2, bitPos)) % 2;
return result == 1;
}
注意:bitPos以0开头(代表nr 1的位)
答案 2 :(得分:1)
您只需检查该位置的-(void)DataReceived
{
dispatch_async(dispatch_get_main_queue(), ^{
[actInd stopAnimating];
[actInd removeFromSuperview];
// do your UI updates here...
});
NSLog(@"data array %@",dm.arrayData);
}
是否设置为bit
。
1