【问题标题】:Calculating at binary level in javascript在javascript中以二进制级别计算
【发布时间】:2012-05-14 11:31:27
【问题描述】:

在我的 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 位)的十进制表示等于数字:255 我宁愿转换它并将当前可能的位置移动到存储为@987654328 @。

代码:

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

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

01101011

可以存储为:107

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

  1. 将 3 位当前可能位置移动到数字转换回二进制数
  2. 从该二进制代码中获取第三个数字
  3. 检查该数字是 1 还是 0

问题: 是否可以在不在 Javascript 中来回转换为二进制的情况下进行计算?如果是,怎么做?

【问题讨论】:

标签: javascript algorithm binary


【解决方案1】:

移位使相关位为最低有效位,然后检验该值的奇偶性:

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

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

【讨论】:

  • 我想我有一个错误;尝试使用8 而不是7 进行编辑。如果您需要更改行的大小,只需将该数字更改为行宽(或者您可以将其作为函数的第三个参数。)
  • 也许我做错了什么,因为x = 255 >> (8 - 1) % 2;document.write(x); 打印127
  • JS 运算顺序意味着位移在此处最后被评估,在模数之后,所以你实际上是在做255 >> ((8 - 1) % 2) = 255 >> 1。你想最后做模:x = (255 >> (8 - 1)) % 2
猜你喜欢
  • 2021-12-27
  • 2022-03-24
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 2021-12-08
  • 2021-03-05
  • 1970-01-01
  • 2012-10-04
相关资源
最近更新 更多