js小數轉整數

function toInt32(x) {
return x | 0;
}

二進制否運算符
二進制否運算符(~)將每個二進制位都變爲相反值(0變爲1,1變爲0)。它的返回結果有時比較難理解,因爲涉及到計算機內部的數值表示機制。

~ 3 // -4
上面表達式對3進行二進制否運算,得到-4。之所以會有這樣的結果,是因爲位運算時,JavaScirpt 內部將所有的運算子都轉爲32位的二進制整數再進行運算。

3的32位整數形式是00000000000000000000000000000011,二進制否運算以後得到11111111111111111111111111111100。由於第一位(符號位)是1,所以這個數是一個負數。JavaScript 內部採用補碼形式表示負數,即需要將這個數減去1,再取一次反,然後加上負號,才能得到這個負數對應的10進制值。這個數減去1等於11111111111111111111111111111011,再取一次反得到00000000000000000000000000000100,再加上負號就是-4。考慮到這樣的過程比較麻煩,可以簡單記憶成,一個數與自身的取反值相加,等於-1。
-3 // 2
上面表達式可以這樣算,-3的取反值等於-1減去-3,結果爲2。

對一個整數連續兩次二進制否運算,得到它自身。

~~3 // 3
所有的位運算都只對整數有效。二進制否運算遇到小數時,也會將小數部分捨去,只保留整數部分。所以,對一個小數連續進行兩次二進制否運算,能達到取整效果。

~~2.9 // 2
~~47.11 // 47
~~1.9999 // 1
~~3 // 3
使用二進制否運算取整,是所有取整方法中最快的一種。

對字符串進行二進制否運算,JavaScript 引擎會先調用Number函數,將字符串轉爲數值。

// 相當於~Number(‘011’)
~‘011’ // -12

// 相當於~Number(‘42 cats’)
~‘42 cats’ // -1

// 相當於~Number(‘0xcafebabe’)
~‘0xcafebabe’ // 889275713

// 相當於~Number(‘deadbeef’)
~‘deadbeef’ // -1
Number函數將字符串轉爲數值的規則,參見《數據的類型轉換》一章。

對於其他類型的值,二進制否運算也是先用Number轉爲數值,然後再進行處理。

// 相當於 ~Number([])
~[] // -1

// 相當於 ~Number(NaN)
~NaN // -1

// 相當於 ~Number(null)
~null // -1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章