JavaScript按位非操作符(~)
問題描述
看到<TFC2017/>的抽獎代碼
~~23.5 // 23
為什么~操作符可以將數(shù)字取整呢?
問題解答
回答1:經(jīng)過 ToInt32。其作用是將被操作數(shù)的二進(jìn)制形式按位翻轉(zhuǎn)。所以兩個 ~~ 連在一起就相當(dāng)于進(jìn)行了如下操作:
對操作數(shù)進(jìn)行 ToInt32
按位翻轉(zhuǎn)
再次按位翻轉(zhuǎn)實(shí)際上也還是利用了 ToInt32 的絕對值取整
另外關(guān)于 ~ 操作符有個技巧還是比較實(shí)用的:~(-1) 的值為 0,而且 -1 是唯一一個經(jīng)過 ~ 運(yùn)算返回假值的值(包括其他那些特殊的值比如 NaN、{}、[] 等都不會返回假值)字符串和數(shù)組的 indexOf 函數(shù)查找失敗會返回 -1,這時候就可以用 if(~str.indexOf(’str’)) // 來表示找到了比判斷 >= 0 或者 != -1 更優(yōu)雅,跟用 !! 來判斷非假值有異曲同工之妙
作者:mdluo鏈接:https://www.zhihu.com/questio...
取整是把浮點(diǎn)數(shù)轉(zhuǎn)化了32位二進(jìn)制整數(shù),所以能還原狀態(tài)的位操作都能進(jìn)行取整,如23.5 >> 0 //23、23.5 >> 0 //23。
相關(guān)文章:
1. dockerfile - [docker build image失敗- npm install]2. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問題3. java如何高效讀寫10G以上大文件4. angular.js - angular內(nèi)容過長展開收起效果5. dockerfile - 我用docker build的時候出現(xiàn)下邊問題 麻煩幫我看一下6. 在windows下安裝docker Toolbox 啟動Docker Quickstart Terminal 失敗!7. javascript - vue-router怎么不能實(shí)現(xiàn)跳轉(zhuǎn)呢8. javascript - IOS微信audio標(biāo)簽不能通過touchend播放9. docker不顯示端口映射呢?10. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””
![dockerfile - [docker build image失敗- npm install]](https://m.cgvv.com.cn/attached/image/news/202311/1028105a80.png)