示例:我將使用0xC0000000(32 位有符號補碼)用于-2^30
const num = Number('0xC0000000')
console.log(num === -Math.pow(2,30)) // expected: true
uj5u.com熱心網友回復:
JavaScript 在兩個地方只有二進制補碼整數:
作為某些操作期間的臨時值。按位運算子使用 32 位整數,一些
Math物件方法使用 32 位整數值(例如,imul)。如在一個元件
Int16Array,Int32Array或Int64Array。(Int32Array在你的情況下。)
否則,所有數字要么是number(IEEE-754 雙精度二進制浮點數)要么是BigInt(任意精度非二進制補碼整數)。
因此,例如,您可以在單元素中使用二進制補碼Int32Array。
const array = Int32Array.from([0xC000000]);
console.log(array[0].toString(16));
但是,無論何時使用該 32 位整數,它都會轉換為number. 也就是說,JavaScript 在number32 位有符號整數和 32 位有符號整數之間的轉換相當聰明。例如,考慮這個二進制補碼邊界條件:
const array = Int32Array.from([0x7FFFFFFF]);
console.log(array[0].toString(16)); // 7fffffff
array[0];
console.log(array[0].toString(16)); // -80000000
這就是您想要的二進制補碼操作,即使它不是二進制補碼操作(理論上;允許 JavaScript 引擎優化)。操作是將 32 位二進制補碼 int轉換為number、遞增number、轉換number回 32 位二進制補碼 int。但是我們還是得到了想要的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/356438.html
標籤:javascript
下一篇:如何排除空格作為用戶輸入?
