Javascript 位運算符(,|,^,<<,>>,>>>)

文章目錄

  • 一、什么是位運算?
  • 二、如何使用
    • 1. 位與(AND):&
      • 用途
        • (1)數據清零
        • (2)判斷奇偶
    • 2. 位或(OR):|
      • 用途
        • (1)向下取整
    • 3. 位異或(XOR):^
    • 4. 位非(NOT):~
    • 5. 左移(Left Shift):<<
    • 6. 右移(Right Shift):>>
    • 7. 無符號右移(Unsigned Right Shift):>>>
  • 注意優先級


一、什么是位運算?

位運算是一種對二進制數進行操作的技術,常用于優化算法處理底層數據。在JavaScript中,位運算符包括按位與(&)按位或(|)按位異或(^)左移(<<)右移(>>)無符號右移(>>>)。這些運算符可以對數字的二進制表示進行操作,實現一些特定的位級操作。例如,按位與運算可以用來提取特定位的值,按位或運算可以將特定位設置為1,按位異或運算可以進行位翻轉等。通過合理使用位運算,可以提高代碼效率和性能

二、如何使用

1. 位與(AND):&

兩個位都為 1 時,結果才為 1。

5 & 3     // 在二進制中是 101 & 011 = 001 (十進制的 1)

用途

(1)數據清零
// 任何數 & 0都為 0
5 & 0 === 0
(2)判斷奇偶

根據最未位是0還是1來決定,為0就是偶數,為1就是奇數

(a & 1) === 0 等價于 a % 2 === 0;
(5 & 1) === 1;
(4 & 1) === 0;

2. 位或(OR):|

兩個位中至少有一個為 1 時,結果為 1。

5 | 3     // 在二進制中是 101 | 011 = 111 (十進制的 7)

用途

(1)向下取整
(3.6 | 0) === 3

位運算符| 0的工作原理是利用按位或運算符|將一個數字轉換為32位有符號整數。這個操作會將數字的小數部分截斷,只保留整數部分。原理如下:

  1. JavaScript中的數字是以64位浮點數的形式存儲的,其中包含整數部分小數部分
  2. 當應用位運算符| 0時,會將數字轉換為32位有符號整數
  3. 按位或運算符|會對數字的二進制表示的每一位進行按位運算。
  4. 由于32位整數無法表示小數部分,因此在進行按位或運算時,小數部分被截斷,只保留整數部分。
  5. 最終的結果是一個32位整數,其中小數部分被丟棄,只保留整數部分。

3. 位異或(XOR):^

兩個位相同則結果為 0,不同則結果為 1。

5 ^ 3     // 在二進制中是 101 ^ 011 = 110 (十進制的 6)

4. 位非(NOT):~

反轉操作數的每一位,即將 1 變為 0,將 0 變為 1。

~5       // 在二進制中是 0000 0101 的 NOT 為 1111 1010,因為 JavaScript 使用 32 位整數,所以結果是 -6

5. 左移(Left Shift):<<

將一個數的所有位向左移動指定的位數,左邊空出的位填充 0。左移一位相當于乘以 2 。

5 << 1    // 101 (5 的二進制) << 1 = 1010 (十進制的 10)
5 << 2    // 101 (5 的二進制) << 2 = 101000 (十進制的 20)

6. 右移(Right Shift):>>

將一個數的所有位向右移動指定的位數,右邊空出的位填充符號位(左邊最高位的值)。右移一位相當于除以 2 ,且結果總是向零截斷。

5 >> 1    // 101 (5 的二進制) >> 1 = 0101 (十進制的 5)
-5 >> 1   // 1111 1111 1111 1111 1111 1111 1111 1011 (-5 的二進制補碼) >> 1 = 1111 1111 1111 1111 1111 1111 1111 1110 (十進制的 -3)

7. 無符號右移(Unsigned Right Shift):>>>

將一個數的所有位向右移動指定的位數,右邊空出的位始終填充 0。無符號右移不改變符號位,因此可以用于正數和負數。

5 >>> 1   // 0000 0101 (5 的二進制) >>> 1 = 0000 0010 (十進制的 2)
-5 >>> 1  // 1111 1111 1111 1111 1111 1111 1111 1011 (-5 的二進制補碼) >>> 1 = 1111 1111 1111 1111 1111 1111 1111 1110 (十進制的 2147483646)

注意優先級

在JavaScript中,位運算符優先級相對較低的,位運算符的優先級低于算術運算符(如加法、減法)、關系運算符(如大于、小于)、邏輯運算符(如與、或)等常見運算符。如果表達式中包含多種類型的運算符,需要使用括號來明確指定運算的順序,以確保邏輯正確性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19351.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19351.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19351.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GO語言 gin框架 簡述

原文地址 基本路由 Go語言中文文檔 一、簡介 Gin是一個golang的輕量級web框架&#xff0c;性能不錯&#xff0c;API友好。 Gin支持Restful風格的API&#xff0c;可以直接從URL路徑上接收api參數或者URL參數&#xff0c;也可是使用json或者表單 數據綁定的方式接收參數。 Gin響…

【傳知代碼】BERT論文解讀及情感分類實戰-論文復現

文章目錄 概述原理介紹BERT模型架構任務1 Masked LM&#xff08;MLM&#xff09;任務2 Next Sentence Prediction (NSP)模型輸入下游任務微調GLUE數據集SQuAD v1.1 和 v2.0NER 情感分類實戰IMDB影評情感數據集數據集構建模型構建 核心代碼超參數設置訓練結果注意事項 小結 本文…

AIOps在線評測基準首階段建設完成,面向社區發布真實運維數據!

本文根據必示科技算法研究員、產品總監聶曉輝博士在2024 CCF國際AIOps挑戰賽線下宣講會上的演講整理成文。 2024年1月份OpenAIOps社區成立&#xff0c;隨著越來越多的社區成員加入&#xff0c;各項工作在有條不紊的推進中。在線評測基準系統&#xff08;AIOps Live Benchmark&a…

積鼎CFDPro水文水動力模型,專為中小流域洪水“四預”研發的流體仿真技術

水動力模型與水文模型是水利工程與水文學研究中不可或缺的兩大工具。水動力模型著重于流體運動的動力學機制&#xff0c;通過一系列方程組捕捉水流的時空變化&#xff0c;而概念性水文模型則側重于流域尺度的水文循環過程&#xff0c;利用物理概念與經驗關系進行近似模擬。兩者…

Windows系統部署YOLOv5 v6.1版本的訓練與推理環境保姆級教程

文章目錄 一 概述二 依賴環境(prerequisites)2.1 硬件環境2.2 軟件環境 三 環境安裝3.1 創建并激活虛擬環境3.2 安裝Pytorch與torchvision3.3 校驗Pytorch安裝3.4 下載 YOLOv5 v6.1 源碼3.5 安裝 YOLOv5 依賴3.6 下載預訓練模型3.7 安裝其他依賴3.8 測試環境安裝3.9 測試訓練流…

jupyter notebook更改位置

1.找到jupyer的配置文件 一般在c盤用戶的.jupter文件夾下 2. 用記事本打開這個配置文件&#xff0c;定位到c.NotebookApp.notebook_dir /path_to_your_directory 替換你的位置 3.找到jupyer圖標的位置&#xff0c;打開屬性 添加要存放的位置在目標文件的末尾&#xff0c;重新…

python | spacy,一個神奇的 Python 庫!

本文來源公眾號“python”&#xff0c;僅用于學術分享&#xff0c;侵權刪&#xff0c;干貨滿滿。 原文鏈接&#xff1a;spacy&#xff0c;一個神奇的 Python 庫&#xff01; 大家好&#xff0c;今天為大家分享一個神奇的 Python 庫 - spacy。 Github地址&#xff1a;https:/…

一個全面了解Xilinx FPGA IP核的窗口:《Xilinx系列FPGA芯片IP核詳解》(可下載)

隨著摩爾定律的逐漸放緩&#xff0c;傳統的芯片設計方法面臨著越來越多的挑戰。而FPGA以其并行處理能力和可編程性&#xff0c;為解決復雜問題提供了新的途徑。它允許設計者在同一個芯片上實現多種不同的功能模塊&#xff0c;極大地提高了資源的利用率和系統的綜合性能。 FPGA…

領域數據模型建設步驟

領域數據模型建設步驟 以某音樂app為例: 1.數據調研和業務調研&#xff0c;識別業務過程&#xff0c;實體&#xff0c;關鍵指標 業務過程&#xff1a;播放&#xff0c;收藏&#xff0c;下載&#xff0c;點擊&#xff0c;購買&#xff0c;支付 實體&#xff1a;音樂&#xff0c…

HCIA-ARP

ARP的由來 ARP這一種協議它會是在我們HCIA中第一個需要完全掌握的一個協議&#xff0c;不然對于數據通訊來說大家都會一直覺得很繞圈 協議棧&#xff0c;網線&#xff0c;網卡&#xff0c;它們組成了我們最小的數據通信的小脈絡注&#xff1a;可以了解ARP攻擊&#xff08;冒充訪…

使用Java和MyBatis獲取表頭與數據

使用Java和MyBatis獲取表頭與數據 在數據處理與展示中&#xff0c;經常需要將數據庫查詢結果中的表頭&#xff08;列名&#xff09;與實際數據提取出來。本文將介紹如何通過Java的JDBC和MyBatis來實現這一需求。 1. 使用JDBC獲取表頭與數據 在JDBC中&#xff0c;可以使用Res…

文獻解讀-群體基因組第二期|《中國人群中PAX2新生突變的檢測及表型分析:一項單中心研究》

關鍵詞&#xff1a;應用遺傳流行病學&#xff1b;群體測序&#xff1b;群體基因組&#xff1b;基因組變異檢測&#xff1b; 文獻簡介 標題&#xff08;英文&#xff09;&#xff1a;Detection of De Novo PAX2 Variants and Phenotypes in Chinese Population: A Single-Cente…

new CCDIKSolver( OOI.kira, iks ); // 創建逆運動學求解器

demo案例 new CCDIKSolver(OOI.kira, iks); 在使用某個特定的庫或框架來創建一個逆運動學&#xff08;Inverse Kinematics, IK&#xff09;求解器實例。逆運動學在機器人學、動畫和計算機圖形學等領域中非常重要&#xff0c;它用于根據期望的末端執行器&#xff08;如機器人的…

Compose第四彈 Compose項目

目標&#xff1a; 1.可供學習的Compose項目 一、官方提供項目 谷歌官方提供的Compose項目&#xff1a; GitHub - android/compose-samples: Official Jetpack Compose samples. 項目及主要頁面展現 1.1 Reply項目 1.首頁底部TAB欄 2.側邊欄菜單&#xff1a;拖動滑出和收起…

建設現代智能工業-智能化、數字化、自動化節能減排

建設現代智能工業-智能化節能減排 遵循“一體化”能源管理(Integrated Energy Management)的設計宗旨&#xff0c;集成城市各領域(如工業.交通、建筑等&#xff09;的能源生產和消費信息&#xff0c;面向城市政府、企業、公眾三類實體&#xff0c;提供“一體化”的綜合能源管理…

uniapp h5項目切換導航欄及動態渲染按鈕顏色

1.效果圖 2.html,動態渲染按鈕樣式---三元判斷 <!-- 切換欄 --><view class"statusList"><block v-for"(item,index) in list" :key"index"><view class"swiper-tab-list" :class"current item.id?activ…

CEEMDAN +組合預測模型(CNN-Transfromer + XGBoost)

注意&#xff1a;本模型繼續加入 組合預測模型全家桶 中&#xff0c;之前購買的同學請及時更新下載! 往期精彩內容&#xff1a; 時序預測&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析與比較-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;Transformer-BiGRU預測模…

靜態加速和動態加速是啥區別

以下是兩者之間的主要區別&#xff1a; 加速對象與內容&#xff1a; 靜態加速&#xff1a;主要針對網頁中的靜態資源&#xff0c;如HTML文件、CSS文件、JavaScript文件、圖片、Flash動畫等。這些資源的特點是更新頻率較低&#xff0c;適合通過緩存技術加速。 動態加速&#xf…

網絡學習(11) |深入解析客戶端緩存與服務器緩存:HTTP緩存控制頭字段及優化實踐

文章目錄 客戶端緩存與服務器緩存的區別客戶端緩存瀏覽器緩存應用程序緩存優點缺點 服務器緩存優點缺點 HTTP緩存控制頭字段Cache-ControlExpiresLast-ModifiedETag 緩存策略的優化與實踐經驗分享1. 使用合適的緩存頭字段2. 結合使用Last-Modified和ETag3. 利用CDN進行緩存4. 實…

【JAVA WEB實用與優化技巧】如何自己封裝一個自定義UI的Swagger組件,包含Swagger如何處理JWT無狀態鑒權自動TOKEN獲取

目錄 一、Swagger 簡介1. 什么是 Swagger&#xff1f;2. 如何使用 Swagger3. Springboot 中swagger的使用示例1. maven 引入安裝2. java配置 二、Swagger UI存在的缺點1.不夠方便直觀2.請求的參數沒有緩存3.不夠美觀4.如果是JWT 無狀態登錄&#xff0c;Swagger使用起來就沒有那…