node ArrayBuffer 8字节溢出时发生了什么?

var buffer = new ArrayBuffer(8);
console.log(buffer);
var z = new Uint8Array(buffer);
z[0]=255;
console.log(z);

比如这样的代码,输出为

ArrayBuffer { byteLength: 8 }
Uint8Array [ 255, 0, 0, 0, 0, 0, 0, 0 ]

如果传入256,输出[0,0,0,0,0,0,0,0]
如果传入257,输出[1,0,0,0,0,0,0,0]
我知道无符号8位最大255,但是超出255的部分既没有报错也没有进位,而是看起来像是循环了一样,计算机内部是怎么处理的?

阅读 1.5k
1 个回答

解决了。。
如同 C 語言,不同類型的 TypedArray 可以容納的 bytes 範圍是固定的,超過此一範圍,就會出現「溢位(Overflow)」,例如 Uint8Array 中僅能放入 1 byte = 8 bits 的資料,如果放入 0x100(256,9 bits),就會溢位。

那溢位後,資料會怎麼呈現呢?

每個語言實作不盡相同,TypedArray 的溢位處理規則和多數語言相同:捨棄溢出的 high bits。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题