搜尋

首頁  >  問答  >  主體

JavaScript位元非運算子(~)

看到<TFC2017/>的抽獎代碼

#
~~23.5 // 23

為什麼~運算子可以將數字取整呢?

伊谢尔伦伊谢尔伦2757 天前1053

全部回覆(1)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-06-28 09:31:08

    經過 ToInt32。其作用是將被操作數的二進位形式按位翻轉。所以兩個 ~~ 連在一起就相當於進行如下操作:

    1. 對操作數進行 ToInt32

    2. 按位翻轉

    3. 再次位元翻轉其實也還是利用了 ToInt32 的絕對值取整

    另外關於~ 操作符有個技巧還是比較實用的:~(-1) 的值為0,而且 -1 是唯一一個經過 ~ 運算 -1 是唯一一個經過 ~ 運算返回假值的值(包括其他那些特殊的值例如NaN、{}、[] 等都不會回傳假值)字串和陣列的indexOf 函數查找失敗會回傳
    -1,這時候就可以用if(~str.indexOf('str ')) // 來表示找到了比判斷 >= 0

    != -1

    更優雅,跟用
    !!

    來判斷非假值有異曲同工之妙

    作者:mdluo連結:https://www.zhihu.com/questio... 取整是把浮點數轉換了32位元二進位整數,所以能還原狀態的位元操作都能進行取整,如

    23.5 >> 0 //23🎜、🎜23.5 >> 0 //23🎜。 🎜

    回覆
    0
  • 取消回覆