【C++】位运算bitset

2024-08-26 11:18
文章标签 c++ 运算 bitset

本文主要是介绍【C++】位运算bitset,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C++ 位运算学习笔记

1. 位运算的基本概念

  • 作用:位运算是对整数在二进制表示下的操作,包括按位与、按位或、按位异或、左移、右移等操作。
  • 优势:位运算可以高效地进行一些数值操作,如位掩码、位计数等,提高程序的执行效率。
  • 发展历程:位运算是计算机科学中的基础概念之一,在计算机领域有着广泛的应用。

示例代码

#include <iostream>int main() {int a = 5; // 二进制表示为 0000 0101int b = 3; // 二进制表示为 0000 0011// 按位与(&)int result_and = a & b; // 0000 0001(二进制)= 1(十进制)std::cout << "Bitwise AND: " << result_and << std::endl;// 按位或(|)int result_or = a | b; // 0000 0111(二进制)= 7(十进制)std::cout << "Bitwise OR: " << result_or << std::endl;// 按位异或(^)int result_xor = a ^ b; // 0000 0110(二进制)= 6(十进制)std::cout << "Bitwise XOR: " << result_xor << std::endl;// 左移(<<)int result_left_shift = a << 1; // 0000 1010(二进制)= 10(十进制)std::cout << "Left shift: " << result_left_shift << std::endl;// 右移(>>)int result_right_shift = a >> 1; // 0000 0010(二进制)= 2(十进制)std::cout << "Right shift: " << result_right_shift << std::endl;return 0;
}

2. 位运算的应用场景

  • 位掩码:使用位运算来设置和清除某些位,以实现状态标志的管理。
  • 位计数:使用位运算来统计一个整数中二进制位中1的个数,常用于优化算法。
  • 位解析:使用位运算来解析数据的各个字段,如网络协议中的数据帧解析。

示例代码

#include <iostream>// 判断整数n的第pos位是否为1
bool isBitSet(int n, int pos) {return (n & (1 << pos)) != 0;
}// 设置整数n的第pos位为1
int setBit(int n, int pos) {return n | (1 << pos);
}// 清除整数n的第pos位为0
int clearBit(int n, int pos) {return n & (~(1 << pos));
}// 更新整数n的第pos位为val(0或1)
int updateBit(int n, int pos, int val) {return (n & ~(1 << pos)) | (val << pos);
}int main() {int num = 5; // 二进制表示为 0000 0101// 判断第2位是否为1std::cout << "Bit at position 2 is set: " << isBitSet(num, 2) << std::endl;// 将第3位设置为1num = setBit(num, 3); // 0000 1101std::cout << "After setting bit at position 3: " << num << std::endl;// 将第0位清除为0num = clearBit(num, 0); // 0000 1100std::cout << "After clearing bit at position 0: " << num << std::endl;// 更新第1位为0num = updateBit(num, 1, 0); // 0000 1000std::cout << "After updating bit at position 1 to 0: " << num << std::endl;return 0;
}

3. 位运算的使用技巧

  • 使用位运算符代替乘除法:位移运算(左移和右移)可以代替乘除法进行数值的快速计算,提高效率。
  • 逻辑运算和位运算的结合:通过逻辑运算(与、或、非)和位运算(左移、右移)相结合,实现复杂逻辑的快速计算。

示例代码

#include <iostream>// 判断一个整数是否为2的幂
bool isPowerOfTwo(int n) {return n > 0 && (n & (n - 1)) == 0;
}// 计算2的幂次方
int powerOfTwo(int exp) {return 1 << exp; // 等价于 pow(2, exp)
}int main() {// 判断一个整数是否为2的幂std::cout << "Is 16 power of two? " << isPowerOfTwo(16) << std::endl; // 输出1// 计算2的幂次方std::cout << "2^5 = " << powerOfTwo(5) << std::endl; // 输出32return 0;
}

4. 实战案例分析

  • 位图:使用位运算来实现位图,节省内存空间,用于高效存储和处理大量布尔值信息。
  • 哈希函数:通过位运算来实现快速的哈希函数,用于在哈希表中快速查找和插入数据。

通过学习位运算,可以更好地理解计算机中整数的二进制表示方式,掌握位运算的基本原理和常用技巧,从而在实际编程中更加灵活地运用位运算来解决问题。

这篇关于【C++】位运算bitset的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108405

相关文章

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元