我正在尝试对两个值进行编码,一个可以是 0、1、2 或 3 的“移动方向”和一个也可以是 0、1、2 或 3 的“看方向”我知道可以将此信息存储为一个字节所以我仍然是位运算的新手,所以试图弄清楚这一点让我很难过。我想有一个像function encode(m, l) { // returns byte}function decode(byte) { // returns { m, l }}
3 回答

慕容708150
TA贡献1831条经验 获得超4个赞
所以首先,Javascript 没有字节数据类型。它只有数字类型。Javascript 不需要将您的结果存储在单个字节中,即使它适合一个字节。
您需要 2 位来存储数字 0、1、2 或 3。另外两个位来存储其他 0、1、2、3。第二个数字需要位移 2 位并添加到第一个数字。这与乘以 4 相同。所以...
function encode(m,l) {
return m + l * 4;
}
function decode(byte) {
var m = byte % 4;
var l = (byte - m ) /4;
return {m:m, l:l};
}
通过查找来执行此操作可能会更快。
(0,0) <=> 0
(1,0) <=> 1
(2,0) <=> 2
(3,0) <=> 3
(0,1) <=> 4
(1,1) <=> 5
(2,1) <=> 6
(3,1) <=> 7
(0,2) <=> 8
(1,2) <=> 9
(2,2) <=> 10
(3,2) <=> 11
(0,3) <=> 12
(1,3) <=> 13
(2,3) <=> 14
(3,3) <=> 15
添加回答
举报
0/150
提交
取消