JS的位運算子「與」( )及應用

2022-09-09 07:03:08 字數 1388 閱讀 9461

與其他語言一樣,js也有位運算子,這裡介紹一下「&」,及其乙個簡單的應用:

「&」的運算方法:兩個數值的個位分別相與,同時為1才得1,只要乙個為0就為0。

如下表表示:ab

結果111

1000

1000

0我們就可以利用 & 的運算特性,來判斷乙個數是否為偶數。

我們知道,如果乙個正整數是偶數,那麼它的二級制表示的最低為一定不能是1,所以,可以與1進行&運算,如果為0,則說明最低為為0,就是偶數。

var iseven = function(n) ;
乙個數 n 是 2 的冪,當且僅當 n 是正整數,並且 n 的二進位制表示中僅包含 1 個 1。

與上面判斷偶數的思路相似,我們也可以用 & 運算來測試。

這裡有個技巧是可以用n & (n - 1)來進行檢測,乙個數是否是2的冪,原理如下:

假設 n 的二進位制表示為(a10...0)₂,其中 a 表示若干個高位,1 表示最低位的那個 1,0...0 表示後面的若干個 0,那麼 n−1 的二進位制表示為:

(a01...1)₂

我們將(a10...0)₂(a01...1)₂進行按位與運算,高位 a 不變,在這之後的所有位都會變為 0,這樣我們就將最低位的那個 1 移除了。移除之後,如果不為0,那麼表示整個二級制數不止乙個1,所以就肯定不是2的冪,反之,如果為0,整個二級制數只有乙個1,則為2的冪。

因此,如果 n 是正整數並且n & (n - 1) = 0,那麼 n 就是 2 的冪。

故判斷乙個數是否為2的冪可用如下方法進行判斷:

var ispoweroftwo = function(n) ;
根據數學知識我們知道如果乙個數是4的冪,那麼它必然是2的冪,而且在此基礎上,它的二進位制表示必然所有的1都在偶數字上。

我們假設數字為使用32位二進位制表示的正整數,即 n <= 2^31 - 1。

我們可以構建乙個整數 mask ,它的所有偶數二進位制位都是 0,所有奇數二進位制位都是 1。這樣一來,我們將 n 和 mask 進行按位與運算,如果結果為 0,說明 n 二進位制表示中的 1 出現在偶數的位置,否則說明其出現在奇數的位置。

mask=(10101010101010101010101010101010)₂

或者用16進製表示,使其更美觀:

mask=(aaaaaaaa)₁₆

那麼在判斷的時候就可以用以下判斷是否為偶數:

var ispoweroffour = function(n) ;

JS 位運算子

在js中有 等位運算子。在對乙個數值使用位運算子時,js會先將數值轉換為二進位制,然後進行位運算。在js中對乙個數值轉進行二進位制轉換,會得到乙個長度為32位的二進位制數,通常第乙個為1的位之前所有為0的為在表示時可以省略。常見位運算子使用方法有下列幾種 非,a 即 將a的二進位製碼的每一位 32位...

js位運算子

我們可能很少在程式設計中用位運算,如果沒深入學習,可能也很難理解。平時的數值運算,其實是要先轉換成二進位制再進行運算的,而位運算就是直接進行二進位制運算,所以位運算的執行效率肯定是更高的。下面通過一些例項來加深對位運算的理解。運算子我們都知道,只有兩個都為真,結果才為真。道理是一樣的,只有兩個數的值...

位運算子與位運算

位運算是對二進位制位的操作,它應用於整形資料,把整形資料看成固定的二進位制序列,然後對二進位制序列進行位運算 按位與運算 按位與運算子 是雙目運算子。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1 否則為0。參與運算的數以補碼方式出現。例c a b a 1010...