Javascript按位操作

Javascript按位操作,javascript,bit-manipulation,bitwise-operators,bit,Javascript,Bit Manipulation,Bitwise Operators,Bit,我想知道是否有办法确定给定的二进制模式中,两个或更多的1是否在另一个二进制模式中。我之所以说模式,是因为它的实际值并不决定一个是否在另一个之中 比如说, 0001 1110 0000 0000 0001 1111 0000 0000 --> true 0001 0000 1100 0000 0001 1111 0000 0000 --> false 0001 1100 0000 1000 0001 0000 0000 1111 --> true 0001 1000 110

我想知道是否有办法确定给定的二进制模式中,两个或更多的1是否在另一个二进制模式中。我之所以说模式,是因为它的实际值并不决定一个是否在另一个之中

比如说,

0001 1110 0000 0000
0001 1111 0000 0000
--> true

0001 0000 1100 0000
0001 1111 0000 0000
--> false

0001 1100 0000 1000
0001 0000 0000 1111
--> true

0001 1000 1100 0000
0001 0000 0000 1111
--> false
我尝试过使用各种类型的AND/OR/XOR/NOT,但不确定如何实现。 请帮忙

因此,有关数据的问题如下:

const RANKS = [
  0b0000000001110001,
  0b0000001001000110,
  0b0001001100000100,
  0b0000000011011000,
];
我正在尝试循环排列,以查看它是否符合模式:

const PATTERNS = [
  0b0001111100000000,
  0b0000111110000000,
  0b0000011111000000,
];

只有1个等级中的2个必须在模式中“拟合”为真< /p> 如果你将代码>和/或代码>这两个模式结合在一起,你将得到一个只有在两个模式都具有“<代码> 1 ”的位置的模式。然后,您可以使用的算法之一来计算设置的位数。最简单的算法是以下函数

count

函数计数(num){
var c=0;
while(num>0){
if(num&1){
C++;
}
num=num>>>1;
}
返回c;
}
console.log(计数(1));/*1 */
console.log(计数(2));/*1 */
console.log(计数(3));/*2*/
函数sharesAtLeastTwoBits(x,y){
var a=x&y;
如果(!a)返回false;
而(!(a&1))a>>>=1;
返回a!=1;
}
console.log(ShareSatleAttWobits(
0b0001111000000000,
0b0001111100000000
))
console.log(ShareSatleAttWobits(
0B00010000111000000,
0b0001111100000000
))
console.log(ShareSatleAttWobits(
0B00011100000001000,
0b0001000000001111
))
console.log(ShareSatleAttWobits(
0B00011000011000000,
0b0001000000001111

))
数据是在数组缓冲区还是字符串中?第二个示例如何有效。每个数组是否包含四个元素?你能在stacksnippets中包含数据的数组表示吗?第二个是错误的,因为1中只有1个适合匹配的模式。你可以使用
&
,然后我尝试了你的解决方案,它工作得非常好。非常感谢。感谢您提供另一个解决方案。这同样有效。