如何使用按位运算符返回0的位

时间:2012-08-21 00:11:30

标签: javascript bit-manipulation

我已经在这个问题上苦苦挣扎了很长时间。这是关于此答案的后续问题(How to divide x number of players into 2 teams randomly multiple times, differently every time?)。

所以,我有x个玩家,每个玩家都给1 << n个掩码值。通过使用这些面具,我可以很容易地与每个团队中的2名球员形成匹配。现在,如果玩家总数是5,那么一个可能的匹配可能是这样的:

01100 team a
00011 team b
------------
10000 player resting

或者有6名玩家,它们看起来像这样:

100010 team a
001001 team b
-------------
000100 player resting
010000 player resting

问题
如何通过比较团队a和团队b面具来获得那些休息的球员? (我是一个完全按位的菜鸟,所以代码示例很受欢迎)

由于

2 个答案:

答案 0 :(得分:1)

对团队A和B的价值做XOR

var resting = a ^ b;

然后休息的玩家将被0标记,即:

100010 team a
001001 team b
-------------
101011 players resting

最后,遍历结果的每一位:

var totalPlayers = 6;

for (var i = 1; i <= totalPlayers; i++) {

   if ((resting & 1) === 0) {
       console.log("Player #" + i + " is resting.");
   }

   resting >>>= 1;
}

以下是实例:http://ideone.com/Kb3XJ(在Java中,不是JavaScript,但这不是问题)

答案 1 :(得分:0)

你可以将它们按位或它们在一起然后它不是为了得到所有休息的玩家。然后你必须一点一点地去找单独的休息球员。

100010 
001001
------OR
101011 #all players playing
------NOT
010100 #all players not playing