CSP備考---位運算

前言

? ? ? ? 本期我們將學習位運算,與本期類型的考點(二進制轉換)反碼、補碼、原碼。

1、位運算是什么

首先我們需要先了解位運算是什么。

我們知道,計算機中的數在內存中都是以二進制形式進行存儲的?,而位運算就是直接對整數在內存中的二進制位進行操作,因此其執行效率非常高,在程序中盡量使用位運算進行操作,這會大大提高程序的性能。

那么,涉及位運算的運算符如下表所示:

符號描述運算規則實例(以四位二進制數為例)
&兩個位都為1時,結果才為1。0001&0001=1,0001&0000=0,0000&0000=0000
|兩個位都為0時,結果才為0。0001∣0001=0001,0001∣0000=0001,0000∣0000=0000
^異或兩個位相同為0,相異為1。0001∧0001=0000,0001∧0000=1,0000∧0000=0
~取反0變1,1變0。~0=1,~1=0
<<左移各二進位全部左移若干位,高位丟棄,低位補0。

0001<<k=0100,k=2,k kk是左移的位數,這里k = 2 k=2k=2

>>右移

各二進位全部右移若干位,對無符號數,高位補0,有符號數,右移補1 11。

0100>>k=0001,k=2,k kk是右移的位數,這里k = 2 k=2k=2

2、位運算的性質

2.1 運算符的優先級

優先級需要弄清楚,如果不太清楚可以加小括號確保是想要的運算順序,這里只是相對優先級,即只是和一些常用的算術運算符做比較。

2.2 位運算符的運算律

3、位運算高級操作

如下表,請讀者認真閱讀理解,在閱讀的過程中可以對示例進行運算。

當然,這里只是一些常用的,并不是全部,位運算的神奇遠不止于此。

4、負數的位運算?

首先,我們要知道,在計算機中,運算是使用的二進制補碼,而正數的補碼是它本身,負數的補碼則是符號位不變,其余按位取反,最后再+ 1 +1+1得到的, 例如:

15 1515,原碼:00001111 ? 00001111\space00001111 補碼:00001111 0000111100001111

? 15 -15?15,原碼:10001111 ? 10001111\space10001111 補碼:11110001 1111000111110001

那么對于負數的位運算而言,它們的操作都是建立在補碼上的,得到的運算結果是補碼,最后將補碼結果轉化成一個普通的十進制數結果。
但需要注意的是,對于有符號數的右移操作,不同的處理器架構可能有不同的規定。在某些架構中(如x86),如果對有符號數執行算術右移(arithmetic right shift),則高位空出來的位置會補上符號位;對于無符號數的右移操作,所有架構都遵循相同的規則:高位空出來的位置會補0。例如對于? 15 -15?15,其補碼為11110001 , 11110001,11110001,右移一位( ? 15 > > 1 ) (-15>>1)(?15>>1)得到的是11111000 1111100011111000,即? 8 -8?8,其他的同理。
在大多數現代處理器上,無論是有符號數還是無符號數,左移操作總是將空出來的低位補0。

這里我們介紹幾個特殊的性質:

  • 快速判斷是否為-1

????????在鏈式前向星中,我們初始化h e a d headhead數組為? 1 -1?1,最后判斷是否遍歷完u uu的所有邊時,即判斷i ii是否為? 1 -1?1,我們直接用~ i \sim i~i即可。原因就在于? 1 -1?1的補碼是11111111 1111111111111111,按位取反就變為00000000 0000000000000000,這實際上就是0 00。

  • 取最低位的1,lowbit函數

????????也就是x & ( ? x ) x\&(-x)x&(?x),這在樹狀數組中起著巨大作用,這里指路一篇樹狀數組講解b l o g blogblog:點這里,我們來證明一下,這里取x = 15 x=15x=15,對于15 & ( ? 15 ) 15\&(-15)15&(?15),我們知道,在補碼上進行運算得到的是00000001 0000000100000001,需要注意二元運算的符號位我們需要進行運算。

位運算的運用

1、判斷第i位是否為0

2、將第i位設置為1

3、統計有多少個1?

int count(int x){int cnt = 0;while(x){x = x & (x - 1);cnt ++;}return cnt;
}

對于任意的x xx,轉換成二進制后,是形如這樣的數字:a a . . . a a 10...00 aa...aa10...00aa...aa10...00,從右向左數有任意多個0 00,直到遇見第一個1 11,字母a aa用來占位,代表1 11左邊的任意數字。x ? 1 x-1x?1轉換成二進制后,是形如這樣的數字:a a . . . a a 01...11 aa...aa01...11aa...aa01...11,從右向左數,原來的任意多個0 00都變成1 11,原來的第一個1 11,變成0 00,字母a aa部分不變。對x xx 和 x ? 1 x-1x?1 進行 按位與 計算,會得到:a a . . . a a 00...00 aa...aa00...00aa...aa00...00,從右向左數,原來的第一個1 11變成了0 00,字母a部分不變。所以 x & ( x ? 1 ) x \& (x-1)x&(x?1)相當于消除了 x xx 從右向左數遇到的第一個1 11。那么,x xx轉換成二進制后包含多少個1 11,count函數里的循環就會進行多少次,直到x xx所有的1 11都被“消除”。

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

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

相關文章

332_C++_mmap 映射文件或設備到進程的地址空間,或者創建一個新的映射區域

mmap : 映射文件或設備到進程的地址空間,或者創建一個新的映射區域(通常是匿名的) mmap 是 Linux 和其他類 Unix 系統中的一個系統調用,用于映射文件或設備到進程的地址空間,或者創建一個新的映射區域(通常是匿名的)。mmap 提供了靈活的方式來管理內存,它經常用于實現…

打造本地GPT專業領域知識庫AnythingLLM+Ollama

如果你覺得openai的gpt沒有隱私&#xff0c;或者需要離線使用gpt&#xff0c;還是打造專業領域知識&#xff0c;可以借用AnythingLLMOllama輕松實現本地GPT. AnythingLLMOllama 實現本地GPT步聚&#xff1a; 1 下載 AnythingLLM軟件 AnythingLLM官網地址&#xff1a; Anythi…

功能卓越,未來可期!實在Agent智能體公測圓滿收官

“被需要的智能才是實實在在的智能。”一直以來&#xff0c;實在智能始終堅持從行業本質出發思考如何圍繞客戶需求打造更智能、更普惠的智能體數字員工&#xff0c;切實關注用戶真實的使用體驗與感受。 自2020年7月起&#xff0c;實在智能率先推出第一代實在RPA數字員工&#…

SpringBoot設置默認文件大小

1、問題發現 有個需求&#xff0c;上傳文件的時候&#xff0c;發現提示了這個錯誤&#xff0c;看了一下意思是說&#xff0c;文件超過了1M。 看我們文件的大小&#xff1a; 發現確實是&#xff0c;文件超出了1M&#xff0c;查了一下資料&#xff0c;tomcat默認上傳文件大小為1M…

Python環形數組

在編程中&#xff0c;環形數組&#xff08;Circular Array&#xff09;是一種特殊的數組結構&#xff0c;其中最后一個元素連接到第一個元素&#xff0c;形成一個環形。這種結構在某些算法問題中很有用&#xff0c;例如約瑟夫環問題&#xff08;Josephus Problem&#xff09;。…

簡單粗暴的翻譯英文pdf

背景&#xff1a;看書的時候經常遇到英文pdf&#xff0c;沒有合適的翻譯軟件可以快速翻譯全書。這里提供一個解決方案。 Step 1 打開英文pdfCTRLA全選文字CTRLC復制打開記事本CTRLV復制保存為data.txt Step 2 寫一個C腳本 // ToolPdf2Html.cpp : 此文件包含 "main&quo…

大型語言模型自我進化綜述

24年4月來自北大的論文“A Survey on Self-Evolution of Large Language Models”。 大語言模型&#xff08;LLM&#xff09;在各個領域和智體應用中取得了顯著的進步。 然而&#xff0c;目前從人類或外部模型監督中學習的LLM成本高昂&#xff0c;并且隨著任務復雜性和多樣性的…

子模塊介紹,開發規范說明和工具類封裝

在上一章的內容中&#xff0c;我們完成了聚合工程的搭建以及工程依賴的導入 當然我們會延續上一章的傳統提供一個傳送門給各位&#xff0c;如未完成上一章內容&#xff0c;請點擊左側->傳送門 概述子模塊 上一章我們已經創建了整個聚合工程 該聚合工程有以下子模塊 <…

如何將一個Web應用部署到 Kubernetes 集群

Kubernetes&#xff08;常簡稱為 k8s&#xff09;是一個是一個開源的容器編排平臺&#xff0c;由 Google 設計并捐贈給 Cloud Native Computing Foundation&#xff08;CNCF&#xff09;的開源平臺。它旨在提供一個標準化的容器部署流程&#xff0c;讓部署、擴展和管理應用程序…

C# WinForm —— 18 NumericUpDown 介紹

1. 簡介 數字顯示框&#xff0c;通過向上、向下按鈕來 增加/減小 顯示的數值 2. 常用屬性 屬性解釋(Name)控件ID&#xff0c;在代碼里引用的時候會用到,一般以 numUD 開頭Hexadecimal數值 up-down 控件的值是否應以十六進制顯示Increment每單擊一下按鈕&#xff0c;增加或減…

springboot基本使用十(搭建jpa)

jpa底層是hibernate,(ORM)對象關系映射技術 jpa依賴: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> 配置文件: server:port: 8088Spring:datasou…

音源分離|Music Source Separation in the Waveform Domain

一、文章摘要 本文中&#xff0c;比較了兩種時域結構。首先將最初為語音源分離而開發的卷積tasnet應用于音樂源分離任務。雖然ConvTasnet擊敗了許多現有的頻域方法&#xff0c;但正如人類評估所顯示的那樣&#xff0c;它存在明顯的artifacts。本文提出了一種新的時域模型Demucs…

鴻蒙內核源碼分析 (協處理器篇) | CPU 的好幫手

本篇很重要&#xff0c;對CP15協處理所有16個寄存器一一介紹&#xff0c;可能是全網介紹CP15最全面的一篇&#xff0c;鴻蒙內核的匯編部分(尤其開機啟動)中會使用&#xff0c;熟練掌握后看匯編代碼將如虎添翼。 協處理器 協處理器 (co-processor) 顧名思義是協助主處理器完成…

服務器渲染和客戶端渲染:解析服務器渲染(SSR)和客戶端渲染(CSR)的概念,各自的優點和缺點,并比較如Next.js, Nuxt.js等解決方案

首先從概念上區分&#xff0c;服務器渲染&#xff08;Server-side Rendering&#xff0c;簡稱 SSR&#xff09;和客戶端渲染&#xff08;Client-side Rendering&#xff0c;簡稱 CSR&#xff09;主要的區別在于頁面的渲染地點不同&#xff1a; 服務器渲染&#xff0c;即 SSR&am…

韻搜坊(全棧)-- 前后端初始化

文章目錄 前端初始化后端初始化 前端初始化 使用ant design of vue 組件庫 官網快速上手&#xff1a;https://www.antdv.com/docs/vue/getting-started-cn 安裝腳手架工具 進入cmd $ npm install -g vue/cli # OR $ yarn global add vue/cli創建一個項目 $ vue create ant…

社交媒體數據恢復:默往

如果你在默往社交軟件中丟失了重要的數據&#xff0c;不要著急&#xff0c;以下是一些步驟可以幫助你進行數據恢復&#xff1a; 登錄賬號&#xff1a;首先&#xff0c;你需要登錄默往社交軟件賬號&#xff0c;確保你已經登錄了正確的賬號&#xff0c;因為如果你登錄了錯誤的賬號…

邦芒簡歷:如何恰當呈現跳槽經歷在簡歷中

在職業生涯中&#xff0c;跳槽往往伴隨著個人的成長與選擇。然而&#xff0c;頻繁或不當的跳槽記錄可能會給HR留下不穩定的印象。因此&#xff0c;在撰寫簡歷時&#xff0c;如何恰當地呈現跳槽經歷就顯得尤為重要。 1、短期工作經歷的處理 對于短期工作經歷&#xff08;尤其是…

弘君資本策略:股指預計保持震蕩上揚格局 關注公用事業、電網設備等板塊

弘君資本指出&#xff0c;周一A股商場探底上升、小幅震動收拾&#xff0c;早盤股指低開后震動回落&#xff0c;滬指盤中在3126點附近取得支撐&#xff0c;午后股指企穩上升&#xff0c;盤中電網設備、公用事業、電力以及工程建造等職業體現較好&#xff1b;半導體、互聯網以及軟…

掌握社交的這二十個心理技巧

1.自信&#xff1a;這一點說起來容易做起來難&#xff0c;但就算是假裝出來的自信&#xff0c;通過你的肢體語言表現出來。在很大程度也可以幫助你留下很好的第一印象。人們喜歡自信的人。因為他們更可靠&#xff0c;更值得信賴&#xff0c;更具吸引力。 2.當你第一次見到某人…

PXE+Kickstart無人值守安裝安裝Centos7.9

文章目錄 一、什么是PXE1、簡介2、工作模式3、工作流程 二、什么是Kickstart1、簡介2、觸發方式 三、無人值守安裝系統工作流程四、實驗部署1、環境準備2、服務端&#xff1a;關閉防火墻和selinux3、添加一張僅主機的網卡4、配置僅主機的網卡4.1、修改網絡連接名4.2、配IP地址4…