JavaScript中的逐位测试

时间:2014-08-07 11:15:16

标签: javascript bit-manipulation bitwise-operators

我有以下位字符串:

var input = '11100001';

我想检查是否存在8位,所以我尝试过:

input & '10000000'

但它给了我8918528。我该如何测试?

2 个答案:

答案 0 :(得分:6)

你试图对两个字符串执行按位AND,它会隐式地将它们转换为假设为10的整数。你应该将它们解析为显式提供基数的整数:

parseInt(input,2) & parseInt('10000000',2)
// 128

编辑: 要检查n是否设置了位,您可以按n-1位向右移动并检查它是否为1

parseInt(input,2) >> 7 & 1 === 1

答案 1 :(得分:4)

添加@pawel的优秀答案,让我解释一下为什么会得到8918528

只要JavaScript看到这一点:

'11100001' & '10000000'

它会尝试将两个字符串转换为整数;基数为10的整数。所以我们得到:

11100001 (base10) & 10000000 (base10)

是,

101010010101111101100001 (base2) & 100110001001011010000000 (base2)

逐位AND,

101010010101111101100001 &
100110001001011010000000
------------------------
100010000001011000000000 (base2)

是,

8918528 (base10)