C++位運(yùn)算有哪些常見(jiàn)應(yīng)用

c++
小樊
81
2024-11-08 20:30:24

C++中的位運(yùn)算符主要用于對(duì)二進(jìn)制位進(jìn)行操作。以下是一些常見(jiàn)的C++位運(yùn)算及其應(yīng)用:

  1. 按位與(&):當(dāng)兩個(gè)相應(yīng)的二進(jìn)制位都為1時(shí),結(jié)果為1,否則為0。應(yīng)用場(chǎng)景包括:

    • 判斷奇偶性:通過(guò)將數(shù)字與1進(jìn)行按位與操作,如果結(jié)果為1,則數(shù)字為奇數(shù);如果結(jié)果為0,則數(shù)字為偶數(shù)。
    • 提取某些位:通過(guò)按位與操作和掩碼,可以提取數(shù)字的某些位。
  2. 按位或(|):當(dāng)兩個(gè)相應(yīng)的二進(jìn)制位有一個(gè)為1時(shí),結(jié)果為1,否則為0。應(yīng)用場(chǎng)景包括:

    • 設(shè)定某些位:通過(guò)按位或操作和掩碼,可以將數(shù)字的某些位設(shè)置為1。
  3. 按位異或(^):當(dāng)兩個(gè)相應(yīng)的二進(jìn)制位不同時(shí),結(jié)果為1,否則為0。應(yīng)用場(chǎng)景包括:

    • 切換某些位:通過(guò)按位異或操作和掩碼,可以切換數(shù)字的某些位。
    • 兩數(shù)交換:不需要額外的變量就可以交換兩個(gè)數(shù)的值。
  4. 按位取反(~):將數(shù)字的二進(jìn)制位全部取反,即1變?yōu)?,0變?yōu)?。應(yīng)用場(chǎng)景包括:

    • 求反碼:按位取反可以得到一個(gè)數(shù)的按位取反碼,用于糾錯(cuò)編碼等。
  5. 左移(<<):將數(shù)字的二進(jìn)制位向左移動(dòng)指定的位數(shù),右邊空出的位用0填充。應(yīng)用場(chǎng)景包括:

    • 乘法:將數(shù)字左移n位等于將該數(shù)字乘以2^n。
  6. 右移(>>):將數(shù)字的二進(jìn)制位向右移動(dòng)指定的位數(shù),對(duì)于無(wú)符號(hào)數(shù),左邊空出的位用0填充;對(duì)于有符號(hào)數(shù),行為依賴(lài)于具體的實(shí)現(xiàn)(邏輯右移或算術(shù)右移)。應(yīng)用場(chǎng)景包括:

    • 除法:將數(shù)字右移n位等于將該數(shù)字除以2^n。
    • 求余數(shù):對(duì)于無(wú)符號(hào)數(shù),將數(shù)字右移n位等于將該數(shù)字除以2^n的余數(shù)。
  7. 位計(jì)數(shù)(__builtin_popcount):計(jì)算一個(gè)整數(shù)中設(shè)置為1的二進(jìn)制位的數(shù)量。應(yīng)用場(chǎng)景包括:

    • 統(tǒng)計(jì)字符出現(xiàn)的次數(shù):例如,統(tǒng)計(jì)字符串中某個(gè)字符出現(xiàn)的次數(shù)。
  8. 位掩碼(bitmask):使用按位與、按位或、按位異或等操作對(duì)數(shù)字進(jìn)行位級(jí)操作,以實(shí)現(xiàn)特定的功能。應(yīng)用場(chǎng)景包括:

    • 文件權(quán)限控制:使用位掩碼表示文件的讀、寫(xiě)、執(zhí)行權(quán)限。
    • 壓縮存儲(chǔ):使用位掩碼表示顏色信息,以節(jié)省存儲(chǔ)空間。

0