C++中實(shí)現(xiàn)位運(yùn)算的示例代碼
一、位運(yùn)算概念
計(jì)算機(jī)唯一識(shí)別的數(shù)據(jù)的二進(jìn)制數(shù)據(jù),計(jì)算機(jī)中所有數(shù)據(jù)都以二進(jìn)制形式存儲(chǔ),即 0 和 1 兩種狀態(tài)。計(jì)算機(jī)對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行的運(yùn)算(算數(shù)運(yùn)算、邏輯運(yùn)算等)被稱為位運(yùn)算,即對(duì)二進(jìn)制數(shù)的每一位進(jìn)行操作的運(yùn)算。
二、位運(yùn)算符號(hào)
| 運(yùn)算符 | 作用 | 說(shuō)明 |
| & | 按位與 | 兩個(gè)操作數(shù)同時(shí)為1,結(jié)果為1 |
| | | 按位或 | 兩個(gè)操作數(shù)同時(shí)為0,結(jié)果為0 |
~ | 按位非 | 操作數(shù)為1,結(jié)果為0;操作數(shù)為0,結(jié)果為1 |
^ | 按位異或 | 兩個(gè)操作數(shù)相同,結(jié)果為0;不相同結(jié)果為1 |
<< | 左移 | 右側(cè)空位補(bǔ)0 |
>> | 右移 | 左側(cè)空位補(bǔ)符號(hào)位 |
按位與的用途:需要清零的位與0進(jìn)行與操作;需要保留的某些位與1進(jìn)行與操作。
按位或的用途:將置1的某些位與1進(jìn)行或,需要保持的某些位與0進(jìn)行或。
三、代碼解析
#include <iostream>
#include <iomanip> // 僅用于格式化二進(jìn)制輸出,無(wú)額外子函數(shù)
using namespace std;
int main() {
cout << "=== 基礎(chǔ)位運(yùn)算示例 ===" << endl;
int a = 6; // 二進(jìn)制:00000110
int b = 10; // 二進(jìn)制:00001010
// 1. 按位與 &
int andResult = a & b; // 00000010 → 2
cout << "a & b = " << andResult << " ";
for (int i = 7; i >= 0; i--)
cout << ((andResult >> i) & 1);
cout << endl;
// 2. 按位或 |
int orResult = a | b; // 00001110 → 14
cout << "a | b = " << orResult << " ";
for (int i = 7; i >= 0; i--)
cout << ((orResult >> i) & 1);
cout << endl;
// 3. 按位異或 ^
int xorResult = a ^ b; // 00001100 → 12
cout << "a ^ b = " << xorResult << " ";
for (int i = 7; i >= 0; i--)
cout << ((xorResult >> i) & 1);
cout << endl;
// 4. 按位取反 ~(僅顯示低8位)
int notResult = ~a;
cout << "~a = " << notResult << " ";
for (int i = 7; i >= 0; i--)
cout << (((unsigned int)notResult & 0xFF) >> i & 1);
cout << endl;
// 5. 左移 <<
int leftShift = a << 2; // 00011000 → 24
cout << "a << 2 = " << leftShift << " ";
for (int i = 7; i >= 0; i--)
cout << ((leftShift >> i) & 1);
cout << endl;
// 6. 右移 >>
int rightShift = b >> 1; // 00000101 → 5
cout << "b >> 1 = " << rightShift << " ";
for (int i = 7; i >= 0; i--)
cout << ((rightShift >> i) & 1);
cout << "\n=====================" << endl;
// ===================== 第二部分:位運(yùn)算實(shí)用技巧 =====================
// 技巧1:判斷奇偶
int num1 = 15, num2 = 16;
cout << num1 << " 是" << ((num1 & 1) ? "奇數(shù)" : "偶數(shù)") << endl;
cout << num2 << " 是" << ((num2 & 1) ? "奇數(shù)" : "偶數(shù)") << endl;
// 技巧2:交換兩個(gè)數(shù)(無(wú)需臨時(shí)變量)
int x = 8, y = 12;
cout << "\n交換前:x=" << x << ", y=" << y << endl;
x = x ^ y;
y = x ^ y;
x = x ^ y;
cout << "交換后:x=" << x << ", y=" << y << endl;
// 技巧3:將某一位置1(第3位,從0計(jì)數(shù))
int val = 5; // 00000101
int bitPos = 3;
val |= (1 << bitPos); // 00001101 → 13
cout << "\n將第" << bitPos << "位置1后:" << val << endl;
// 技巧4:將某一位清零(第2位)
val = 13; // 00001101
bitPos = 2;
val &= ~(1 << bitPos); // 00001001 → 9
cout << "將第" << bitPos << "位清零后:" << val << endl;
// 技巧5:判斷某一位是否為1(第1位)
val = 9; // 00001001
bitPos = 1;
bool is1 = (val & (1 << bitPos)) != 0;
cout << "第" << bitPos << "位是" << (is1 ? "1" : "0") << endl;
// 技巧6:快速計(jì)算2的n次方
bitPos = 5;
int pow2 = 1 << bitPos; // 32
cout << "2^" << bitPos << " = " << pow2 << endl;
return 0;
}到此這篇關(guān)于C++中實(shí)現(xiàn)位運(yùn)算的示例代碼的文章就介紹到這了,更多相關(guān)C++ 位運(yùn)算內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)學(xué)生個(gè)人消費(fèi)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言學(xué)生個(gè)人消費(fèi)管理系統(tǒng)開(kāi)發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
如何用C語(yǔ)言實(shí)現(xiàn)通用的冒泡排序算法
這篇文章主要介紹了如何用C語(yǔ)言實(shí)現(xiàn)通用的冒泡排序算法的相關(guān)資料該算法支持不同數(shù)據(jù)類型的排序,通過(guò)使用void*指針和函數(shù)指針,實(shí)現(xiàn)了類型無(wú)關(guān)性和比較函數(shù)的靈活性,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
C++運(yùn)行時(shí)獲取類型信息的type_info類與bad_typeid異常
這篇文章主要介紹了C++運(yùn)行時(shí)獲取類型信息的type_info類與bad_typeid異常,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01
C語(yǔ)言指針變量作為函數(shù)參數(shù)的實(shí)現(xiàn)步驟詳解
這篇文章主要介紹了C語(yǔ)言指針變量作為函數(shù)參數(shù)的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-02-02
C++ 數(shù)據(jù)結(jié)構(gòu)完全二叉樹(shù)的判斷
這篇文章主要介紹了C++ 數(shù)據(jù)結(jié)構(gòu)完全二叉樹(shù)的判斷的相關(guān)資料,需要的朋友可以參考下2017-06-06
VS Code遠(yuǎn)程連接Linux服務(wù)器調(diào)試C程序的操作方法
這篇文章主要介紹了VS Code遠(yuǎn)程連接Linux服務(wù)器調(diào)試C程序的操作方法,打開(kāi)遠(yuǎn)程 Linux 服務(wù)器上的文件夾本文以 /root/ 為例,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12
C++中的函數(shù)指針與函數(shù)對(duì)象的總結(jié)
以下是對(duì)C++中的函數(shù)指針與函數(shù)對(duì)象的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下2013-07-07
C++ 基礎(chǔ)教程之虛函數(shù)實(shí)例代碼詳解
虛函數(shù)在 c++ 的繼承體系中是一個(gè)非常重要概念,讓我們可以在子類中復(fù)寫(xiě)父類的方法。這篇文章主要介紹了C++ 基礎(chǔ)教程之虛函數(shù)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2020-02-02

