2 回答

TA貢獻1779條經驗 獲得超6個贊
位運算符用于對二進制位
進行計算,這些位運算符直接處理每一個比特位(bit),所以是非常底層的運算,好處是速度極快
,缺點是很不直觀,許多場合不能使用它們
。
位運算符只對整數
起作用,如果一個運算子不是整數,會自動轉為整數后再執行。雖然在JavaScript內部,數值都是以64位浮點數的形式儲存,但是做位運算的時候,是以32位帶符號的整數
進行運算的,并且返回值也是一個32位帶符號的整數
。
回到上面的問題:
這是左移運算符
,左移運算符表示將一個數的二進制值向左移動指定的位數,尾部補0,即乘以2的指定次方(最高位即符號位不參與移動)。
左移0
位,就相當于將該數值轉為32位整數,等同于取整,對于正數和負數都有效。

TA貢獻1815條經驗 獲得超6個贊
位操作符用于在最基本的層次上,即按內存中表示數值的位來操作數值。ECMAScript 中的所有數
值都以 IEEE-754 64 位格式存儲,但位操作符并不直接操作 64 位的值。而是先將 64 位的值轉換成 32 位
的整數,然后執行操作,最后再將結果轉換回 64 位。對于開發人員來說,由于 64 位存儲格式是透明的,
因此整個過程就像是只存在 32 位的整數一樣
位運算 的操作數都會先對其進行抽象的 ToInt32 操作
ToUint32: (Unsigned 32 Bit Integer)
1.Let number be the result of calling ToNumber on the input argument.
2.If number is NaN, +0, ?0, +∞, or ?∞, return +0.
3.Let posInt be sign(number) × floor(abs(number)).
4.Let int32bit be posInt modulo 232; that is, a finite integer value k of Number type with positive sign and less than 232 in magnitude such that the mathematical difference of posInt and k is mathematically an integer multiple of 232.
5.Return int32bit.
三四步就是個求整取余數的過程
<<0 對實際的值沒有進行具體的位移操作,但是仍然會進行其中的 ToInt32 操作,在一定的范圍內就是簡單的按絕對值取整,超出這個范圍就會變成意想不到的值
添加回答
舉報