JavaScript检查指定位是否置位:0xFFFFFFFFFFFFFFFD测试咨询
确认你的位检查实现是正确的!
首先给你吃个定心丸:你的测试结果全返回false完全符合预期,而且如果你的实现是用**按位与(&)**来判断指定位是否置位的话,这个写法本身也是正确的。
咱们拆解下原因:
你要检查的数值0xFFFFFFFFFFFFFFFD,以64位二进制视角看,末尾几位是...11111101——从0开始数对应位的话:
- 位1(对应掩码
0x2,即二进制10)是0 - 位6(对应掩码
0x40,即二进制1000000)是0 - 位7(对应掩码
0x80,即二进制10000000)是0
这些位本来就没被置位,所以判断返回false是完全合理的。
正确的位检查方式(附代码示例)
在JavaScript里,检查指定位是否激活的标准做法就是用按位与操作:如果(数值 & 掩码) !== 0,说明该位是1(置位);反之则是0(未置位)。不过要注意一个细节:0xFFFFFFFFFFFFFFFD已经超出了普通Number类型的精确整数范围(Number只能精确表示-253到253之间的整数),所以建议用BigInt处理这个大数值,避免精度丢失:
// 用BigInt表示大数值和掩码 const targetValue = 0xFFFFFFFFFFFFFFFDn; const mask2 = 0x2n; const mask40 = 0x40n; const mask80 = 0x80n; // 检查每一位 console.log(`0x2位是否置位:${(targetValue & mask2) !== 0n}`); // false console.log(`0x40位是否置位:${(targetValue & mask40) !== 0n}`); // false console.log(`0x80位是否置位:${(targetValue & mask80) !== 0n}`); // false
如果你的测试代码逻辑和上面一致,那你的实现就是正确的。
内容的提问来源于stack exchange,提问作者Suman Dabbiru
相关产品推荐
相关产品推荐

