我想在JavaScript中创建一个大位字段,它将有效地表示多维标记数组(使用索引来跳转到物理"1D"结构中的各个维度).
我正在考虑如何使用字符串作为位,而不是一堆数字,所以我可以先分配一个适当长度的字符串.数据类型,Unicode和转换等注意事项发挥作用(在JavaScript 1.3之前也没有Unicode支持).
但是,我对其他如何使用JavaScript来实现大位字段的建议持开放态度.
更新:
仅供参考:平均而言,我可能正在使用~2187位/标记(274字节),但想要一个通用答案,而不是可以容纳更多位.
Mat*_*ley 12
字符串的一个问题是它们是不可变的,所以如果你想改变任何东西,你需要重建字符串.
我会坚持使用数字.使用按位运算符,每个数字可以匹配32位.
由于JavaScript数字是双精度浮点数,因此最多可以容纳53位,但是按位运算符将其操作数转换为32位整数,因此您将无法使用它们来获取单个位(如果您想要,你可以通过除法Math.pow等的组合来完成同样的事情,但它会更复杂).
这是一个基本实现,可以让您获取,设置和取消设置各个位:
function BitField() {
this.values = []; // You could set the length here, but it's not necessary
}
BitField.prototype.get = function(i) {
var index = (i / 32) | 0; // | 0 converts to an int. Math.floor works too.
var bit = i % 32;
return (this.values[index] & (1 << bit)) !== 0;
};
BitField.prototype.set = function(i) {
var index = (i / 32) | 0;
var bit = i % 32;
this.values[index] |= 1 << bit;
};
BitField.prototype.unset = function(i) {
var index = (i / 32) | 0;
var bit = i % 32;
this.values[index] &= ~(1 << bit);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2885 次 |
| 最近记录: |