NOI大綱——普及組——位運算總結

位運算總結

1.位運算符號

& \& &——按位與
如果兩個相應的二進制位都為1,則該位的結果值為1,否則為0
∣ | ——按位或
兩個相應的二進制位中只要有一個為1,該位的結果值為1
^——按位異或
若參加運算的兩個二進制位值相同則為0,否則為1
~——取反
用來對一個二進制數按位取反,即將0變1,1變0

舉例:

     1000101        1000101       1000101        1000101&   0101100     |  0101110      ~             ^ 0101110——————————————————————————————————————————————————————————=   0000100      = 1101111     = 0111010        1101011

2.移位運算

< < << <<——左移
用來將一個數的各二進制位全部左移n位,低位以0補充,高位越界后舍棄。

    1左移n位:                    1 << n =2^n(這里指2的n次方)n左移1位:                    n << 1 =2*n

舉例:

   short a=9115         0010001110011011   (9115的二進制表示)a << 1 =18230       0100011100110110   (注意高位越界后舍棄一個0,低位填充一個0)a << 2  = -29076    1000111001101100   (注意高位越界后舍棄兩個0,低位填充兩個0)

注意:左移是做乘2的運算,但這是在符號位(原碼將最高位符號以0表示正,1表示負eg:0010001110011011中的最高位0就是符號位,表示是整數;而1000111001101100最高位是1,表示是負數)不變的情況下。如果符號位發生了改變,說明已經不能做乘2的運算了,否則會溢出,得到的值不是乘2的結果。

注意:short是Java中的表示,它定義的也是整形,不過是16字節(這里為了闡述符號位的改變而使用),而int是32字節

> > >> >>——右移
將一個數的各二進制位右移N位,移到右端的低位被舍棄,高位以符號位填充

    n左移1位 :                     n >> 1=|n/2.0| 算術右移等于除以2向下取整:(-3)>> 1 = -2 3 >> 1 = 1值得一提的是,“整數/2”在c++中實現為“除以2向零取整”,(-3)/  2  =  -1,3 / 2 = 1

舉例:

short b = 9115              0010001110011011 (9115 >> 1) = 4557          0001000111001101(注意低位越界后舍去了一個1,高位補一0(9115 >> 2) = 2278          0000100011100110  (注意低位越界后舍去了兩個1,高位補兩0short c=-32766(負數符號位為1) 1000000000000010-32766 >> 1 = -16383        1100000000000001(注意低位越界后舍棄一個0,高位補1)-32766 >> 2 = -8192         1110000000000000(注意低位越界后舍棄01,高位補倆1)

3.常用技巧

在m位二進制數中,通常稱最低為為第0位,從右到左依次類推,最高位為第m-1位

(n >> k) & 1 求n二進制下的第k位是0還是1,若結果為真,是1,若結果為假,是0。因為1的二進制數中只有第0位數是1,其余位數都是0。

n^=1,,即n=n^1,能讓n變成與原來相反的數(0或1)

n | (1 << k),能把n的第k位變成1

a^b^b=a

x=x&(x-1)用于消去x的最后一位

4.運算符號優先級:

加減優先級最高,位或優先級最低,從左往右優先級遞減

加減     移位       比較大小   位與  異或   位或+,-    <<,>>    >,<,==,!=    &    ^     |

5.位運算常用技巧

<1> 判斷奇偶性

如果把 n 以二進制的形式展示的話,其實我們只需要判斷最后一個二進制位是 1 還是 0 就行了,如果是 1 的話,代表是奇數,如果是 0 則代表是偶數,所以采用位運算的方式的話,代碼如下:

if(n&1){    //若n&1==1(為真)//n是奇數
}
if(!(n&1)){ //若n&1!=1(為假)//n是偶數
}

<2> 求a的b次方

本題涉及數論數論數論,在次不詳細解釋,有興趣的話可以自己了解.

//快速冪
int pow(int a, int b) {int ans = 1;while (b != 0) {if ((b & 1) == 1) { // 添加括號,明確表達式優先級ans *= a;}a *= a;b = b >> 1;}return ans;
}

<3>找處未重復的數

數組中,只有一個數出現奇數次,剩下都出現偶數次,找出出現奇數次的。

思路:兩個相同的數異或的結果是 0,一個數和 0 異或的結果是它本身,所以我們把這一組整型全部異或一下。也就是說,那些出現了偶數次的數異或之后會變成0,那個出現奇數次的數,和 0 異或之后就等于它本身。

#include<iostream>
using namespace std;int main(){int a[9]={4,3,2,2,2,2,5,4,3};int ans=0;for(int i=0;i<9;i++){ans^=a[i];}cout<<ans;return 0;
}

<4> 用O(1)時間檢測整數n是否是2的冪次.

思路:
n如果是2的冪次,則:
1.n>0
2.n的二進制表示中只有一個1
一位n的二進制表示中只有一個1,所以使用n&(n-1)將唯一的一個1消去。
如果n是2的冪次,那么n&(n-1)得到結果為0,即可判斷。
eg: 8的二進制位1000,7的二進制位0111,8&7==0,所以8是2的冪次

#include<iostream>
using namespace std;int main(){int n;cin>>n;if(!(n&(n-1))) cout<<"YES";if(n&(n-1)) cout<<"NO";return 0;
}

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

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

相關文章

“勢”是“態”的偶然性減少

“態勢感知”中的“勢”指的是一種趨勢或傾向性&#xff0c;而“態”則表示狀態或局勢。這個術語常用于描述在一段時間內系統或事件顯示出來的方向性變化或發展趨勢。因此&#xff0c;可以將“態勢”理解為系統或事件狀態變化的趨勢&#xff0c;這種變化通常反映出偶然性減少的…

解析Java中1000個常用類:Calendar類,你學會了嗎?

推薦一個我自己寫的程序員在線工具站: http://cxytools.com 提供一站式在線工具平臺,專為程序員設計,包括時間日期、JSON處理、SQL格式化、隨機字符串生成、UUID生成、隨機數生成、文本Hash等功能,提升開發效率。 以下是正文。 在 Java 編程中,處理日期和時間是一個常見…

Java新手啟航:Windows下JDK安裝,開啟編程之旅

你是不是對編程充滿好奇&#xff0c;想要邁入Java的世界&#xff0c;卻不知道從何開始&#xff1f;別擔心&#xff0c;每一個Java大師都是從安裝JDK開始的&#xff0c;而今天&#xff0c;我將手把手教你如何輕松完成JDK的安裝&#xff0c;讓你邁出編程之旅的第一步! 接下來&am…

websocket基礎使用學習

websocket基礎使用學習 一、websocket是什么&#xff1f;二、使用步驟1.websocket服務的安裝與啟動安裝服務連接與發消息 總結 一、websocket是什么&#xff1f; 以前&#xff0c;很多網站為了實現推送技術&#xff0c;所用的技術都是Ajax 輪詢。輪詢是在特定的的時間間隔&…

ios18開發者預覽,Beta 2升級新增鏡像等功能

近日&#xff0c;蘋果發布了 iOS 18 開發者預覽版 Beta 2 升級&#xff0c;為 iPhone 用戶帶來了多項新功能。據了解&#xff0c;這些新功能包括 iPhone 鏡像和 SharePlay 屏幕共享&#xff0c;以及其他新增功能。 據了解&#xff0c;iPhone鏡像可以讓Mac用戶將iPhone屏幕鏡像…

OLMo:真正完全開源的大模型

最近&#xff0c;又有一家機構AI2&#xff08;Allen Institute for AI&#xff09;開源了一個LLM&#xff1a;OLMo&#xff0c;它的英文全稱就叫Open Language Model。相比之前開源的大模型&#xff0c;OLMo的獨特之處是完全開源&#xff0c;除了訓練的模型&#xff0c;OLMo還開…

ElementUI的基本搭建

目錄 1&#xff0c;首先在控制終端中輸入下面代碼&#xff1a;npm i element-ui -S 安裝element UI 2&#xff0c;構架登錄頁面&#xff0c;login.vue?編輯 3&#xff0c;在官網獲取對應所需的代碼直接復制粘貼到對應位置 4&#xff0c;在繼續完善&#xff0c;從官網添加…

商業智能(BI)實戰項目

商業智能&#xff08;BI&#xff09;實戰項目 期待您的關注 ?大數據學習筆記 1.實現的功能 2.數據庫操作步驟 創建數據庫&#xff1a;create database card;創建表&#xff1a;create table card_apply ( cid bigint primary key auto_increment ,apply_uid bigint ,apply_ent…

商城自動化測試實戰 —— 登錄+滑塊驗證

hello大家好&#xff0c;我是你們的小編&#xff01; 本商城測試項目采取PO模型和數據分離式架構&#xff0c;采用pytestseleniumjenkins結合的方式進行腳本編寫與運行&#xff0c;項目架構如下&#xff1a; 1、創建項目名稱&#xff1a;code_shopping&#xff0c;創建所需項目…

openEuler安裝docker

在openEuler上安裝Docker&#xff0c;可以通過以下步驟進行&#xff1a; 1、更新軟件包索引&#xff1a; sudo yum makecache 2、安裝Docker&#xff1a; sudo yum install docker -y 3、啟動Docker服務&#xff1a; sudo systemctl start docker 4、設置Docker開機自啟&am…

010、GPT-5:AI新紀元的曙光與挑戰

目錄 GPT-5&#xff1a;AI新紀元的曙光與挑戰 1.革命性的個人助理 2.教育領域的變革 3.醫療健康的新篇章 4.科研創新的加速器 5.創意產業的新靈感 6.商業與經濟的智能化 7.社會治理的新工具 8.環境保護與可持續發展 9.倫理與社會影響 學術視角&#xff1a;AI發展的前…

惠海H6392 2.6v升5V 3.7V升9V 4.2V升12V 升壓恒壓芯片 小家電IC

惠海H6392升壓恒壓芯片是一款小家電、移動設備以及其他需要升壓恒壓電源的電子設備設計的DC-DC轉換器。這款芯片以其獨特的產品特性和廣泛的應用場景&#xff0c;為電子產品設計者提供了高效、穩定的電源解決方案。 產品描述&#xff1a; H6392采用了簡單的電流模式升壓技術&a…

使用Collections.shuffle打亂集合順序

使用Collections.shuffle打亂集合順序 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將探討如何使用Java中的Collections.shuffle方法來打亂集合的順序…

單例模式實現方式

單例模式 單例模式&#xff08;Singleton Pattern&#xff09;的主要目的是確保一個類只有一個實例&#xff0c;并提供一個全局訪問點來訪問該實例。 在 Java 中&#xff0c;實現單例模式的方式有幾種常見的方式 懶漢式 public class Singleton{private static final Singlet…

華為od-C卷200分題目4 -電腦病毒感染

華為od-C卷200分題目4 -電腦病毒感染 一個局域網內有很多臺電腦&#xff0c;分別標注為0 - N-1的數字。相連接的電腦距離不一樣&#xff0c;所以感染時間不一樣&#xff0c;感染時間用t表示。其中網絡內一個電腦被病毒感染&#xff0c;其感染網絡內所有的電腦需要最少需要多長…

二叉樹的題目

目錄 1、將遍歷的結果放在list中 2、判斷兩棵樹是否相同 3、翻轉二叉樹 4、判斷平衡二叉樹 5、判斷二叉樹是否對稱 6、判斷是否為完全二叉樹 先創建一個二叉樹 public class BinaryTree {static class TreeNode {public char val;public TreeNode left;public TreeNode …

NextJs 系列文章

NextJs 系列文章 NextJs 初級篇 - 安裝 | 路由 | 中間件NextJs 渲染篇 - 什么是CSR、SSR、SSG、ISR 和服務端/客戶端組件NextJs 數據篇 - 數據獲取 | 緩存 | Server Actions

使用Java實現通用樹形結構轉換工具類:深入解析TreeUtil和TreeNode接口

文章目錄 一、TreeNode接口設計二、TreeUtil工具類設計三、示例&#xff1a;實現TreeNode接口的節點類四、示例&#xff1a;使用TreeUtil構建樹形結構五、總結 &#x1f389;歡迎來到Java學習路線專欄~探索Java中的靜態變量與實例變量 ☆* o(≧▽≦)o *☆嗨~我是IT陳寒&#x1…

基于vue腳手架創建的圖書商城

功能簡介 此項目包括首頁, 搜索列表, 商品詳情, 購物車, 訂單, 支付, 用戶登陸/注冊等多個子模塊&#xff0c;使用 Vue 全家 桶ES6WebpackAxios 等技術&#xff0c;采用模塊化、組件化、工程化的模式開發。 功能模塊圖 2.1首頁 2.2.搜索列表 2.3.商品詳情 2.4.購物車 2.5.支…

條件測試,if語句,case語句

測試命令 格式1&#xff1a;test 條件表達式 格式2&#xff1a;[條件表達式] test命令和 [ ] 相同&#xff0c;建議使用[ ] #方框中要空格 #用test可能會不小心定義變量文件測試 常見的測試操作符含義-d檢查文件是否存在且為目錄-f檢查文件是否存在且為常規文件-L測試…