C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++ 位运算

C++中实现位运算的示例代码

作者:保定思睿 C++ 教研室

位运算是对二进制数的每一位进行的操作,本文介绍了计算机中的位运算概念及常见操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、位运算概念

计算机唯一识别的数据的二进制数据,计算机中所有数据都以二进制形式存储,即 0 和 1 两种状态。计算机对二进制数据进行的运算(算数运算、逻辑运算等)被称为位运算,即对二进制数的每一位进行操作的运算。

二、位运算符号

运算符作用说明
&按位与两个操作数同时为1,结果为1
按位或两个操作数同时为0,结果为0

~

按位非

操作数为1,结果为0;操作数为0,结果为1

^

按位异或

两个操作数相同,结果为0;不相同结果为1

<< 

左移

右侧空位补0

>> 

右移

左侧空位补符号位

按位与的用途:需要清零的位与0进行与操作;需要保留的某些位与1进行与操作。

按位或的用途:将置1的某些位与1进行或,需要保持的某些位与0进行或。

三、代码解析

#include <iostream>
#include <iomanip>  // 仅用于格式化二进制输出,无额外子函数
using namespace std;

int main() {
    
    cout << "=== 基础位运算示例 ===" << endl;
    int a = 6;   // 二进制:00000110
    int b = 10;  // 二进制: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;

    // ===================== 第二部分:位运算实用技巧 =====================
 
    // 技巧1:判断奇偶
    int num1 = 15, num2 = 16;
    cout << num1 << " 是" << ((num1 & 1) ? "奇数" : "偶数") << endl;
    cout << num2 << " 是" << ((num2 & 1) ? "奇数" : "偶数") << endl;

    // 技巧2:交换两个数(无需临时变量)
    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计数)
    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:快速计算2的n次方
    bitPos = 5;
    int pow2 = 1 << bitPos; // 32
    cout << "2^" << bitPos << " = " << pow2 << endl;

    
    return 0;
}

到此这篇关于C++中实现位运算的示例代码的文章就介绍到这了,更多相关C++ 位运算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文