JavaScript 类型数组 - 不同的视图
JavaScript Typed Arrays - Different Views
我正在尝试处理不同类型的类型化数组之间的交互。
例 1.
var buf = new ArrayBuffer(2);
var arr8 = new Int8Array(buf);
var arr8u = new Uint8Array(buf);
arr8[0] = 7.2;
arr8[1] = -45.3;
console.log(arr8[0]); // 7
console.log(arr8[1]); // -45
console.log(arr8u[0]); // 7
console.log(arr8u[1]); // 211
我对前三个读数没有问题,但是最后一个读数的 211 从何而来。这是否与减号的位移有关。
例 2
var buf = new ArrayBuffer(4);
var arr8 = new Int8Array(buf);
var arr32 = new Int32Array(buf);
for (var i = 0; i < buf.byteLength; i++){
arr8[i] = i;
}
console.log(arr8); // [0, 1, 2, 3]
console.log(arr32); // [50462976]
那么50462976从何而来呢?
示例 #1
将正 45 检查为二进制数:
> (45).toString(2)
"101101"
二进制值使用二进制补码取反:
00101101 => 45 signed 8-bit value
11010011 => -45 signed 8-bit value
当我们读取时,我们将11010011
读取为无符号的 8 位值,结果为211
:
> parseInt("11010011", 2);
211
示例 #2
如果以基数 2 打印50462976
:
> (50462976).toString(2);
"11000000100000000100000000"
我们可以添加前导零并将其重写为:
00000011000000100000000100000000
我们可以将其分解为八位字节:
00000011 00000010 00000001 00000000
这显示了二进制3
、2
、1
和0
。32 位整数的存储是大端序的。构造 32 位值时,将按重要性递增的顺序读取 8 位值 0 到 3。
第一个问题。
有符号 8 位整数的范围从 -128 到 127。正部分 (0-127) 映射到从 00000000
到 01111111
的二进制值,另一半 (-128-1) 映射到从 10000000
到 11111111
的二进制值。
如果省略第一位,则可以通过向边界添加 7 位数字来创建数字。在您的情况下,二进制表示形式为 11010011
。第一位是1
,这意味着该数字将是负数。最后7位是1010011
的,这给了我们价值83
。将其添加到边界:-128 + 83 = -45
。就是这样。
第二个问题。
32 位整数由内存中的四个字节表示。您将在缓冲区中存储四个 8 位整数。当转换为Int32Array
时,所有这些值被组合成一个值。
如果这是十进制系统,您可以将其视为组合"1"和"2"得到"12"。在这种情况下,它是相似的,只是乘数不同。对于第一个值,它是 2^24
。然后是2^16
,然后是2^8
,最后是2^0
.让我们来计算一下:
2^24 * 3 + 2^16 * 2 + 2^8 * 1 + 2^0 * 0 =
16777216 * 3 + 65536 * 2 + 256 * 1 + 1 * 0 =
50331648 + 131072 + 256 + 0 =
50462976
这就是为什么你看到这么大的数字。
- Backbonejs,视图中的行为,未捕获的类型错误
- 获取网格视图行中对象的类型
- 为什么我在尝试实例化一个空的backbone.js视图时出现类型错误
- backbone.js未捕获类型parentView尝试实例化子视图时出错
- jQuery 图层选择器类型插件或可自定义的列表视图插件
- JavaScript 类型数组 - 不同的视图 - 2.
- JavaScript 类型数组 - 不同的视图
- 在主干视图中绑定多个事件类型
- 未捕获的类型错误:列表视图没有方法'listview'
- bootstrap-date_picker结合响应的html5类型日期用于iphone视图
- 如何在基于Django类的视图中通过mime类型区分响应
- 查找当前显示在BackboneJS或BackboneLayout中的特定类型的所有视图
- 将json数据转换为强类型视图
- 如何使用HTML/Twitter Bootstrap/Jquery Mobile等创建简单的iOS类型的表视图
- 如何在提交表单post方法之前将复杂数据类型附加到视图模型
- 击倒映射数组与不同类型的视图模型
- 图像视图-无效的图像类型
- 创建一个视图,用于获取结束时间等于或大于当前时间和类型的文档列表
- 未捕获的类型错误:使用主干创建子视图时,未定义不是函数
- 在 NavigationIOS 中推送视图时如何传递对象而不是类型