@@ -464,9 +464,9 @@ function str2ab(str) {
464464
465465### 溢出
466466
467- 不同的视图类型,所能容纳的数值范围是确定的。超出这个范围,就会出现溢出。
467+ 不同的视图类型,所能容纳的数值范围是确定的。超出这个范围,就会出现溢出。比如,8位视图只能容纳一个8位的二进制值,如果放入一个9位的值,就会溢出。
468468
469- TypedArray数组对于溢出,采用的处理方法是求余值。正向溢出(overflow)的含义是输入值大于当前数据类型的最大值,最后得到的值就等于当前数据类型的最小值加上余值,再减去1;负向溢出(underflow)等于当前数据类型的最大值减去余值,再加上1 。
469+ TypedArray数组的溢出处理规则,简单来说,就是抛弃溢出的位,然后按照视图类型进行解释 。
470470
471471``` javascript
472472var uint8 = new Uint8Array (1 );
@@ -478,9 +478,16 @@ uint8[0] = -1;
478478uint8[0 ] // 255
479479```
480480
481- 上面例子中,8位无符号整数的数值范围是0到255,超出这个范围,就是溢出。256相当于正向溢出1,即余值为1,最后的值等于0( ` 0 + 1 -1 ` );-1相当于负向溢出1,余值也为1,最后的值等于255( ` 255 - 1 + 1 ` ) 。
481+ 上面代码中, ` uint8 ` 是一个8位视图,而256的二进制形式是一个9位的值 ` 100000000 ` ,这时就会发生溢出。根据规则,只会保留后8位,即 ` 00000000 ` 。 ` uint8 ` 视图的解释规则是无符号的8位整数,所以 ` 00000000 ` 就是 ` 0 ` 。
482482
483- 下面是8位带符号整数的例子。
483+ 负数在计算机内部采用“2的补码”表示,也就是说,将对应的正数值进行否运算,然后加` 1 ` 。比如,` -1 ` 对应的正值是` 1 ` ,进行否运算以后,得到` 11111110 ` ,再加上` 1 ` 就是补码形式` 11111111 ` 。` uint8 ` 按照无符号的8位整数解释` 11111111 ` ,返回结果就是` 255 ` 。
484+
485+ 一个简单转换规则,可以这样表示。
486+
487+ - 正向溢出(overflow):当输入值大于当前数据类型的最大值,结果等于当前数据类型的最小值加上余值,再减去1。
488+ - 负向溢出(underflow):当输入值小于当前数据类型的最小值,结果等于当前数据类型的最大值减去余值,再加上1。
489+
490+ 请看下面的例子。
484491
485492``` javascript
486493var int8 = new Int8Array (1 );
@@ -492,9 +499,9 @@ int8[0] = -129;
492499int8[0 ] // 127
493500```
494501
495- 上面例子中,8位带符号整数的数值范围是-128到127。128相当于正向溢出1,等于 -128;-129相当于负向溢出1,等于127 。
502+ 上面例子中,` int8 ` 是一个带符号的8位整数视图,它的最大值是127,最小值是-128。输入值为 ` 128 ` 时,相当于正向溢出 ` 1 ` ,根据“最小值加上余值,再减去1”的规则,就会返回 ` -128 ` ;输入值为 ` -129 ` 时,相当于负向溢出 ` 1 ` ,根据“最大值减去余值,再加上1”的规则,就会返回 ` 127 ` 。
496503
497- ` Uint8ClampedArray ` 视图的溢出,与上面的规则有所不同。负向溢出都等于0,正向溢出都等于255 。
504+ ` Uint8ClampedArray ` 视图的溢出规则,与上面的规则不同。它规定,凡是发生正向溢出,该值一律等于当前数据类型的最大值,即255;如果发生负向溢出,该值一律等于当前数据类型的最小值,即0 。
498505
499506``` javascript
500507var uint8c = new Uint8ClampedArray (1 );
@@ -506,7 +513,7 @@ uint8c[0] = -1;
506513uint8c[0 ] // 0
507514```
508515
509- 上面例子中,` Uint8C ` 类型的数值范围与8位无符号整数相同,都是0到255。正向溢出都等于255,负向溢出都等于0 。
516+ 上面例子中,` uint8C ` 是一个 ` Uint8ClampedArray ` 视图,正向溢出时都返回255,负向溢出都返回0 。
510517
511518### TypedArray.prototype.buffer
512519
0 commit comments