|、&、^、~位運算神算法

二進制

0000 0000 0000 0000

爲了表示`正``負`,先輩們就發明了 **原碼**,把`左邊第一位`騰出來,存放符號,`正數用 0` 來表示,`負用 1` 來表示
複製代碼

整數轉二進制

關於十進制整數轉二進制,其實很簡單,記住一個祕訣,就能夠了markdown

2 取餘,逆序排列
複製代碼

就是用 2 整除十進制數,獲得商和餘數,再用 2 整除商,獲得新的商和餘數,一直重複直至商等於 0,將先獲得的餘數做爲二進制數的高位,後獲得的餘數做爲二進制數的低位,依次排序便可oop

例如,咱們將十進制 55 轉換爲 2 進制post

55 % 2 // 商 27 餘 1
27 % 2 // 商 13 餘 1
13 % 2 // 商 6 餘 1
6 % 2 // 商 3 餘 0
3 % 2 // 商 1 餘 1
1 % 2 // 商 0 餘 1
複製代碼

取餘逆序,那麼十進制 55 轉 2 進制的結果就是 110111spa

如十進制 55 的 8 位二進制即 00110111,那麼可能還會有人爲若是是 4 位怎麼辦呢,4 位是存不了 55 這麼大值的,溢出了code

小數轉二進制

可能還有人不瞭解十進制小數是怎麼轉二進制的,其實也有方法口訣orm

乘 2 取整,順序排列
複製代碼
複製代碼

用 2 乘十進制小數,能夠獲得積,將積的整數部分取出,再用 2 乘餘下的小數部分,又獲得一個積,再將積的整數部分取出,如此進行,直到積中的整數部分爲零,或者整數部分爲1,此時 0 或 1 爲二進制的最後一位或者達到所要求的精度爲止,而後把取出的整數部分按順序排列起來,先取的整數做爲二進制小數的高位有效位,後取的整數做爲低位有效位排序

例如,將十進制小數 0.625 轉二進制get

0.625 * 2 = 1.250  // 取整數 1
0.25  * 2 = 0.50   // 取整數 0
0.5   * 2 = 1	   // 取整數 1 並結束
複製代碼
複製代碼

取整順序,那麼十進制小數 0.625 的二進制即爲 0.101string

若是該十進制值是一個大於 1 的小數,那麼整數部分和小數部分分別取二進制再拼接便可it

例如,將十進制小數 5.125 轉二進制

咱們先計算整數 5 的二進制

5 % 2 	// 商  2 餘 1
2 % 2 	// 商  1 餘 0
1 % 2 	// 商  0 餘 1
複製代碼
複製代碼

那麼 5 的二進制即 101,再來看小數部分

0.125 * 2 = 0.250 	// 取整數 0
0.25  * 2 = 0.50  	// 取整數 0
0.5   * 2 = 1		// 取整數 1 並結束
複製代碼
複製代碼

那麼小數部分 0.125 的二進制即 001,拼接可得出十進制數字 5.125 的二進制爲 101.001

還會有一種狀況,例如十進制小數 0.1 取其二進制

0.1 * 2 = 0.2 	// 取整數 0
0.2 * 2 = 0.4 	// 取整數 0
0.4 * 2 = 0.8 	// 取整數 0
0.8 * 2 = 1.6 	// 取整數 1
0.6 * 2 = 1.2 	// 取整數 1 -> 到此咱們看到開始無限循環了
0.2 * 2 = 0.4 	// 取整數 0
0.4 * 2 = 0.8 	// 取整數 0
...
複製代碼
複製代碼

那麼它的二進制就是 0.0001100...... 這樣反覆循環,這也引出了咱們在語言層面的問題,例如 JS 中被人詬病的 0.1 + 0.2 != 0.3 的問題,咱們後面再說

上述介紹來源,詳細解釋請參考-連接地址:juejin.cn/post/689794…

位邏輯運算結果

公式圖:

5DDFA0CC-85CE-4d94-A4AF-75719576B5F6.png

位運算:&

12 & 8 結果是 8

0000 0000 0000 1100         12的二進制
&       0000 0000 0000 1000          8的二進制
------------------------------------------------
        0000 0000 0000 1000    結果: 8的二進制


參考公式圖,從第一位數一一比對結果,得出結果是8的二進制,轉十進制及爲8

複製代碼

位或運算:|

4 & 8 結果是 12

0000 0000 0000 0100          4的二進制
|       0000 0000 0000 1000          8的二進制
------------------------------------------------
        0000 0000 0000 1100    結果:12的二進制


參考公式圖,從第一位數一一比對結果,得出結果是12的二進制,轉十進制及爲12

複製代碼

位異或運算:|

31 & 22 結果是 9

0000 0000 0001 1111          31的二進制
^       0000 0000 0001 0110          22的二進制
------------------------------------------------
        0000 0000 0000 1001    結果: 9的二進制


參考公式圖,從第一位數一一比對結果,得出結果是9的二進制,轉十進制及爲9

複製代碼

位取反運算:|

~123 結果是-124

~       0000 0000 0111 1011          123的二進制
------------------------------------------------
        1111 1111 1000 0100    結果: 9的二進制


參考公式圖,從第一位數一一比對結果,得出結果是9的二進制,轉十進制及爲9

複製代碼

二進制轉十進制

0000 0000 0000 1101
   按位數對應:
    1*2º + 0*2¹ + 1*2² + 1*2³ = 13
複製代碼

2的0次方是1(任何數的0次方都是1,0的0次方無心義)\

參考公式: 未標題-1 (1).jpg

相關文章
相關標籤/搜索