在javascript中以二进制级别计算

时间:2012-05-04 22:36:08

标签: javascript algorithm binary

在我的2D环境中,玩家可以对角线,水平和垂直移动。查看下面的网格时,您可以看到播放器(标记为x)可以移动到他(或她xD)现在的8个不同位置。

 1 | 2 | 3
-----------
 4 | x | 5
-----------
 6 | 7 | 8

而不是将其存储为(这是很多数据):

Go1 = true;
Go2 = true;
Go3 = true;
Go4 = true;
Go5 = true;
Go6 = true;
Go7 = true;
Go8 = true;

我认为最好先将其转换为:

11111111 

..代表8次真实。考虑到这一点并且知道二进制数11111111(8位)的十进制表示等于nummer:255我宁愿将其转换并存储当前可能的位置 - 移动 - 至255

代码:

x = parseInt(11111111);
var bin = x.toInt(2);
document.write(bin);​

这意味着如果(例如)位置(1,4和6)的墙壁=玩家的左侧,玩家只能移动到:

01101011

可以存储为:107

假设玩家想要移动到位置3。这意味着我的脚本必须执行以下操作:

  1. 将3位数字当前可能位置移动到数字转换回二进制
  2. 从二进制代码中获取第3个数字
  3. 检查该号码是1还是0
  4. 问题: 有没有可能计算这个而不在Javascript中来回转换为二进制?如果是,怎么样?

1 个答案:

答案 0 :(得分:0)

比特移位使相关数字最不重要,然后测试值的奇偶校验:

function getPositionInRow(rowval, pos) {
    return (rowval >> (8 - pos)) % 2;
}

这将返回指定位置的值,从左边开始计数,从1开始索引。