進制換算,完全明白js位運算符

明白js位運算的原理前,看下進制如何換算?

以十進制轉二進制爲例,除以2取餘數,若是商數不爲0,商數繼續除以2取餘數,直到商數爲0,例如:code

6變二進制數則爲00000110,過程以下io

6/2 = 3...0function

3/2 = 1...1原理

1/2 = 0...1 二進制

3變二進制數則爲00000011,過程以下移動

3/2 = 1...1co

1/2 = 0...1let

注:二進制轉十進制則將過程相反,其餘進制的轉化也是以此類推數字

瞭解進制換算後,便能探究js全部運算符的原理

一、& 運算(真真爲真)

6&3,則是轉爲二進制後,000001十、00000011進行運算
獲得二進制數,00000010,再由二進制轉十進制就是 2位運算

二、| 運算(非假即真)

6|3的結果爲二進制00000111,換算十進制就是 7

三、^ 運算(相同爲假,不一樣爲真)
6^3的結果爲二進制00000101,換算十進制就是 5

四、~運算(真爲假,假爲真)
~6的結果爲二進制11111001,換算十進制就是 -7 
注:負數換算二進制時,取反碼+1取得反碼數,例如-7,先由7轉化爲二進制是00000111,取反碼就是11111000,在取補碼得11111001

五、>>右移(首位符號爲不動,把32位二進制數字總體往右邊移動指定n位數,右邊超出部分被捨去)
6>>1的結果爲00000110 →  00000011,換算十進制就是 3

六、<<左移(和>>原理相同,方向相反)
6<<1的結果爲00000110 →  00001100,換算十進制就是 12

簡單舉例幾個巧用場景

一、使用&運算符判斷一個數的奇偶,X & 1 等於 0 爲偶,1爲奇

2&1 = 0

1&1 = 1

二、使用~~,>>,<<,>>>,|來取整

~~3.14 = 3

3.14 >> 0 = 3

3.14 << 0 = 3

3.14 | 0 = 3

3.14 >>> 0 = 3(>>>不可對負數取整)

三、^來完成比較兩個數是否相等

1^1 = 0

1^2 != 0

四、使用&,>>,|來完成rgb值和16進制顏色值之間的轉換

function toRGB(hex){

    let hex = hex.replace("#","0x"), r = hex >> 16,  g = hex >> 8 & 0xff, b = hex & 0xff

    return 'rgb("+r+","+g+","+b+")'

}

相關文章
相關標籤/搜索