我有以下位字符串:
var input = '11100001';
我想检查是否存在8位,所以我尝试过:
input & '10000000'
但它给了我8918528
。我该如何测试?
答案 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)