首頁 > web前端 > js教程 > LeetCode 冥想-章節位元操作

LeetCode 冥想-章節位元操作

Susan Sarandon
發布: 2024-12-28 14:10:21
原創
287 人瀏覽過

目錄

  • 簡介
  • 位元運算符
    • 和 (&)
    • 或 (|)
    • 異或 (^)
    • 不是(~)
    • 左移(零填充)(
    • 右移(保留符號)(>>)
    • 右移(無符號)(>>)
  • 有點
  • 設定一下
  • 資源


我們已經進入本系列的最後一章了,終於是時候簡單了解一下位元操作了。

依照維基百科的定義,位元運算在位元串、位元組或二元數字(被視為位元串)的各個位元層級上進行運算。


我們先用二進位(基數 2)表示一個數字。我們可以對數字使用 toString 方法,並指定 基數:

我們也可以解析一個整數,給它一個基數:

請注意,我們也可以表示帶有前綴 0b 的二進位數:

例如,這些是相同的數字:


JavaScript 中所有位元運算都是對 32 位元二進位數執行的。
也就是說,在執行位元運算之前,JavaScript 將數字轉換為 32 位元 **有符號* 整數。 *

例如,17 不會只是 10001,而是 00000000 00000000 00000000 00010001。

執行位元運算後,結果將轉換回 64 位元 JavaScript 數字。

位元運算符

和 (&)

如果兩位都是 1,則結果為 1,否則為 0。

Note
The GIFs below show the numbers as 8-bit strings, but when doing bitwise operations, remember they are converted to 32-bit numbers.

LeetCode Meditations — Chapter  Bit Manipulation

或 (|)

若任一位為 1,則結果為 1,否則為 0。

LeetCode Meditations — Chapter  Bit Manipulation

異或 (^)

若各位不同(一位為1,一位為0),則結果為1,否則為0。

LeetCode Meditations — Chapter  Bit Manipulation

不是(~)

翻轉位(1 變為 0,0 變為 1)。

LeetCode Meditations — Chapter  Bit Manipulation

Note
Bitwise NOTing any 32-bit integer x yields -(x 1).

如果我們使用輔助函數來查看二進位表示,它正如我們所期望的:

最左邊的位表示訊號 - 數字是負數還是正數。

請記住,我們說過 JavaScript 使用 32 位元帶符號整數進行位元運算。
最左邊的位元為 1 表示負數,0 表示正數
此外,運算子對操作數的二進位補碼位元表示進行運算。 對每一位應用運算符,並以位元建構結果。

請注意,二進位補碼允許我們獲得帶有反訊號的數字。
一種方法是反轉正數表示中數字的位元並加 1:

左移(零填充)(

將給定數量的位數向左移動,並添加從右側移入的零位。

請注意,第 32 位(最左邊的一位)被丟棄。

右移(符號保留)(>>)

將給定位數向右移動,在從左側添加位時保留符號。

右移(無符號)(>>)

將給定位數向右移動,從左側加位時加上 0,無論符號為何。


得到一點

要取得特定位,我們首先需要建立一個位元遮罩.
我們可以透過將 1 向左移動我們想要取得的位元的索引來實現這一點。
結果是二進制數和位元遮罩的

但是,使用JavaScript,我們也可以透過索引進行無符號右移,將位元放在第一位(這樣我們就無法得到該位置的實際值,但它是否是1或 0):

例如,我們嘗試 13,二進位為 1101:

設定一點

如果我們想將一位變成 1(換句話說,「設定一點」),我們可以做類似的事情。

首先,我們可以透過將 1 向左移動我們想要設定為 1 的位元的索引來再次建立位元遮罩。
結果是數字和位元遮罩的

請記住,在我們的範例中,13 在二進位中是 1101,假設我們要在索引 1 處設定 0:


我們簡要地了解了位元運算,以及取得/設定位。在最後一章中,我們將從 1 位數開始討論五個問題。在那之前,祝您編碼愉快。

資源

  • 「JavaScript 位元操作的絕對要點」- Lucas F. Costa
  • JS 位元運算子
  • 號碼(MDN)
  • 位元與 (MDN)
  • 位元非 (MDN)
  • 位元或 (MDN)
  • 位元異或 (MDN)
  • 左移(MDN)
  • 右移(MDN)
  • 無符號右移 (MDN)

以上是LeetCode 冥想-章節位元操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板