位運(yùn)算可高效實(shí)現(xiàn)整數(shù)的底層操作,1. 檢查第i位是否為1:使用n & (1 0 && (n & (n-1)) == 0;6. 統(tǒng)計(jì)1的個(gè)數(shù):使用n &= (n-1)循環(huán)清除末位1,最終返回計(jì)數(shù),這些技巧廣泛應(yīng)用於狀態(tài)壓縮、算法優(yōu)化和集合操作中。
位運(yùn)算(Bit Manipulation)在C 中是一種高效處理數(shù)據(jù)底層操作的技術(shù),常用於優(yōu)化性能、節(jié)省內(nèi)存或?qū)崿F(xiàn)算法。下面通過一個(gè)實(shí)用的例子來(lái)展示常見的位運(yùn)算技巧。

? 示例:用位運(yùn)算實(shí)現(xiàn)整數(shù)的常見操作
假設(shè)我們有一個(gè)整數(shù),想通過位運(yùn)算完成以下任務(wù):
- 檢查某一位是否為1
- 設(shè)置某一位為1
- 將某一位清零
- 翻轉(zhuǎn)某一位
- 判斷是否為2 的冪
- 統(tǒng)計(jì)二進(jìn)制中1 的個(gè)數(shù)
#include <iostream> using namespace std; // 1. 檢查第i 位是否為1(從右起第0 位開始) bool isBitSet(int n, int i) { return (n & (1 << i)) != 0; } // 2. 將第i 位設(shè)為1 int setBit(int n, int i) { return n | (1 << i); } // 3. 將第i 位清零int clearBit(int n, int i) { return n & ~(1 << i); } // 4. 翻轉(zhuǎn)第i 位int flipBit(int n, int i) { return n ^ (1 << i); } // 5. 判斷是否是2 的冪(正數(shù)且只有一個(gè)1) bool isPowerOfTwo(int n) { return n > 0 && (n & (n - 1)) == 0; } // 6. 統(tǒng)計(jì)二進(jìn)制中1 的個(gè)數(shù)(Brian Kernighan 算法) int countSetBits(int n) { int count = 0; while (n) { n &= (n - 1); // 每次清除最低位的1 count ; } return count; } int main() { int num = 12; // 二進(jìn)制: 1100 cout << "Number: " << num << " (binary: "; for (int i = 3; i >= 0; --i) { cout << ((num >> i) & 1); } cout << ")\n"; // 檢查第2 位是否為1 cout << "Bit 2 is set: " << isBitSet(num, 2) << endl; // 1 (true) // 設(shè)置第1 位num = setBit(num, 1); // 1100 -> 1110 (14) cout << "After setting bit 1: " << num << endl; // 清零第3 位num = clearBit(num, 3); // 1110 -> 0110 (6) cout << "After clearing bit 3: " << num << endl; // 翻轉(zhuǎn)第0 位num = flipBit(num, 0); // 0110 -> 0111 (7) cout << "After flipping bit 0: " << num << endl; // 判斷是否為2 的冪cout << "Is power of two: " << isPowerOfTwo(num) << endl; // 7 -> false // 統(tǒng)計(jì)1 的個(gè)數(shù)cout << "Number of set bits: " << countSetBits(12) << endl; // 12 -> 1100 -> 2 return 0; }
? 關(guān)鍵點(diǎn)說明
1 :創(chuàng)建一個(gè)只有第i 位為1 的掩碼。
-
&
:用於檢測(cè)位(與操作)。 -
|
:用於設(shè)置位(或操作)。 -
~
:按位取反,配合&
實(shí)現(xiàn)清零。 -
^
:異或,相同為0,不同為1,適合翻轉(zhuǎn)。 -
n & (n - 1)
:經(jīng)典技巧,每次清除最右邊的1。
? 應(yīng)用場(chǎng)景
- 狀態(tài)壓縮(如用一個(gè)int 表示多個(gè)布爾狀態(tài))
- 哈希算法、加密算法
- 高效集合操作(如位圖)
- 算法題中判斷奇偶、交換變量(
a ^= b ^= a ^= b
)、去重等
基本上就這些。位操作看似底層,但掌握後能寫出更高效、更“酷”的代碼。

以上是C位操縱示例的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

高頻交易是虛擬幣市場(chǎng)中技術(shù)含量最高、資本最密集的領(lǐng)域之一。它是一場(chǎng)關(guān)於速度、算法和尖端科技的競(jìng)賽,普通市場(chǎng)參與者難以涉足。了解其運(yùn)作方式,有助於我們更深刻地認(rèn)識(shí)到當(dāng)前數(shù)字資產(chǎn)市場(chǎng)的複雜性和專業(yè)化程度。對(duì)於大多數(shù)人而言,認(rèn)識(shí)並理解這一現(xiàn)象,比親自嘗試更為重要。

C 中的析構(gòu)函數(shù)是一種特殊的成員函數(shù),會(huì)在對(duì)象離開作用域或被顯式刪除時(shí)自動(dòng)調(diào)用。它的主要作用是清理對(duì)像在其生命週期內(nèi)可能獲取的資源,如內(nèi)存、文件句柄或網(wǎng)絡(luò)連接。析構(gòu)函數(shù)在以下情況下自動(dòng)調(diào)用:局部變量離開作用域時(shí)、對(duì)指針調(diào)用delete時(shí)、包含對(duì)象的外部對(duì)象析構(gòu)時(shí)。定義析構(gòu)函數(shù)時(shí)需在類名前加~,且無(wú)參數(shù)和返回值。若未定義,編譯器會(huì)生成默認(rèn)析構(gòu)函數(shù),但不會(huì)處理動(dòng)態(tài)內(nèi)存釋放。注意事項(xiàng)包括:每個(gè)類只能有一個(gè)析構(gòu)函數(shù),不支持重載;建議將繼承類的析構(gòu)函數(shù)設(shè)為virtual;派生類析構(gòu)函數(shù)先執(zhí)行,再自動(dòng)調(diào)用

RAII是C 中用於資源管理的重要技術(shù),其核心在於通過對(duì)像生命週期自動(dòng)管理資源。它的核心思想是:資源在構(gòu)造時(shí)獲取,在析構(gòu)時(shí)釋放,從而避免手動(dòng)釋放導(dǎo)致的洩漏問題。例如,在沒有RAII時(shí),文件操作需手動(dòng)調(diào)用fclose,若中途出錯(cuò)或提前return就可能忘記關(guān)閉文件;而使用RAII後,如FileHandle類封裝文件操作,離開作用域後會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)釋放資源。 1.RAII應(yīng)用於鎖管理(如std::lock_guard)、2.內(nèi)存管理(如std::unique_ptr)、3.數(shù)據(jù)庫(kù)和網(wǎng)絡(luò)連接管理等

在C 中,成員初始化列表用於在構(gòu)造函數(shù)中初始化成員變量,尤其適用於const成員、引用成員、無(wú)默認(rèn)構(gòu)造函數(shù)的類成員及性能優(yōu)化。其語(yǔ)法以冒號(hào)開頭,後接逗號(hào)分隔的初始化項(xiàng)。使用成員初始化列表的原因包括:1.const成員變量必須在初始化時(shí)賦值;2.引用成員必須初始化;3.無(wú)默認(rèn)構(gòu)造函數(shù)的類類型成員需顯式調(diào)用構(gòu)造函數(shù);4.提升類類型成員的構(gòu)造效率。此外,初始化順序由成員在類中聲明順序決定,而非初始化列表中的順序,因此需注意避免依賴未初始化成員。常見應(yīng)用場(chǎng)景包括初始化常量、引用、複雜對(duì)象及需傳參構(gòu)造的

要判斷std::optional是否有值,可使用has_value()方法或直接在if語(yǔ)句中判斷;返回可能為空的結(jié)果時(shí)推薦使用std::optional,避免空指針和異常;不應(yīng)濫用,某些場(chǎng)景下布爾返回值或獨(dú)立bool變量更合適;初始化方式多樣,但需注意使用reset()清空值,並留意生命週期和構(gòu)造行為。

獲取std::vector的第一個(gè)元素有四種常用方法:1.使用front()方法,需確保vector非空,語(yǔ)義清晰且推薦日常使用;2.使用下標(biāo)[0],同樣需判空,性能與front()相當(dāng)?shù)Z(yǔ)義稍弱;3.使用*begin(),適用於泛型編程和STL算法配合;4.使用at(0),無(wú)需手動(dòng)判空但性能較低,越界時(shí)拋出異常,適合調(diào)試或需要異常處理的場(chǎng)景;最佳實(shí)踐是先調(diào)用empty()檢查是否為空,再使用front()方法獲取第一個(gè)元素,避免未定義行為。

PHP開發(fā)AI文本摘要的核心是作為協(xié)調(diào)器調(diào)用外部AI服務(wù)API(如OpenAI、HuggingFace),實(shí)現(xiàn)文本預(yù)處理、API請(qǐng)求、響應(yīng)解析與結(jié)果展示;2.局限性在於計(jì)算性能弱、AI生態(tài)薄弱,應(yīng)對(duì)策略為藉力API、服務(wù)解耦和異步處理;3.模型選擇需權(quán)衡摘要質(zhì)量、成本、延遲、並發(fā)、數(shù)據(jù)隱私,推薦使用GPT或BART/T5等抽象式模型;4.性能優(yōu)化包括緩存、異步隊(duì)列、批量處理和就近區(qū)域選擇,錯(cuò)誤處理需覆蓋限流重試、網(wǎng)絡(luò)超時(shí)、密鑰安全、輸入驗(yàn)證及日誌記錄,以確保系統(tǒng)穩(wěn)定高效運(yùn)行。

InC ,stringscanbeconvertedtouppercaseorlowercasebyprocessingeachcharacterusingstd::toupperorstd::tolowerfrom1.Casteachcharactertounsignedcharbeforeapplyingthefunctiontoavoidundefinedbehavior.2.Modifycharactersinplaceorcopythestringifpreservingtheori
