js中 按位非 運算子妙用

2021-09-11 13:41:18 字數 1082 閱讀 4954

某個數值的按位非操作,可以簡單的理解為該值取負值後減1 例如:

~5 = -5

-1 = -6

~-5 = 5

-1 = 4

~4 = -4

-1 = -5

複製**

二進位制數的負數是取該二進位制數的補碼,然後+1。

二進位制數,最高位為0表示正數,最高位為1表示負數。(最高位分不同情況儲存不一樣)

5的二進位制表示:00000101 (假設最高位為8位)

補碼:11111010 -5:11111011

~按位非操作其實就是取補碼的過程,也就是上述求該值負數的逆過程,所以可以簡單的理解為該值取負值後減1。

5的補碼就是~5,那麼~5+1 = -5,所以~5 = -5-1 = -6

判斷陣列或者字串中是否存在某個元素,一般使用indexof()如下:

if(str.indexof(query) != -1) {} 

if(str.indexof(query) >= 0) {}

複製**

現在可以更加清爽和高階的寫成:

if(~str.indexof(query)) {} 

複製**

原理:

不存在返回-1,~-1 = 0 ,大於-1的值,0,1,2,3 ... 按位非的值1,2,3,4...都大於0

ps: 這種寫法可不僅僅的b格高這麼簡單,位運算相對於比較運算子效率高,對於一次運算本身來說,可能相差無幾,但在迴圈次數過大,比如超過了10000000次,效率就會有差距。

對於浮點數,~~value可以代替parseint(value),而且前者效率更高些

parseint(-2.99) //-2 

~~(-2.99) //-2

複製**

ps: 這些技巧可能會給閱讀**的同學造成困擾,如果不知道原理的話,甚至讓人費解。因此平時寫**的時候,要根據情況決定採用哪種寫法。

js按位運算子及其妙用

大多數語言都提供了按位運算子,恰當的使用按位運算子有時候會取得的很好的效果。在我看來按位運算子應該有7個 1 按位與 是二元運算子,它以特定的方式的方式組合運算元中對應的位,如果對應的位都為1,那麼結果就是1,如果任意乙個位是0 則結果就是0。1 3的結果為1 那我們來看看他是怎麼執行的 1的二進位...

JS按位非 運算子與 運算子的理解

其實是一種利用符號進行的型別轉換,轉換成數字型別 true 1 false 0 0 0 undefined 0 undefined 1 null 0 null 1 按位非運算子,簡單的理解就是改變運算數的符號並減去1,當然,這是只是簡單的理解能轉換成number型別的資料 那麼,對於typeof v...

按位運算子

基本運算子 按位與運算子,可以對變數s的特定位清零,這時可以設定乙個變數mask,將mask中的特定位賦值為0,其他位置為1,然後作運算 s s mask 即可特定位清零。使用按位與運算,可以取變數s的指定位的值,這時可以設定乙個變數mask,將mask中的指定位賦值為1,其他位置賦值為0,然後作運...