C++位操作的常见用法小结

C++位操作的常见用法小结

在C++中,位操作是广泛使用的技巧之一,可以帮助我们对二进制数进行高效的操作。本文将会针对C++中常见的位操作技巧进行一个小结,以供大家参考。

常用的位操作符

在C++中,常用的位操作符有以下几种:

  • & 位与
  • | 位或
  • ^ 异或
  • ~ 反码
  • << 左移
  • 右移

常见位操作技巧

获取二进制中某一位的值

要获取二进制中某一位的值,我们可以通过位运算符&来实现,具体方法是将一个数与一个2的幂次方的数进行&操作,如果结果为0,则表示该位为0,否则为1。例如,判断第5位是否为1:

int num = 0b110101; //二进制表示110101
if(num & (1 << 4)) // 1 << 4表示将1左移4位,得到10000
{
    cout << "第5位是1" << endl;
} 
else
{
    cout << "第5位是0" << endl;
}

设置二进制中某一位的值

要设置二进制中某一位的值,我们可以通过位运算符|和^来实现,具体方法是先将该位变为0,然后再变为1。例如,将第5位改为1:

int num = 0b110101; //二进制表示110101
num &= ~(1 << 4); //先将第5位变为0
num |= (1 << 4); //再将第5位变为1

示例说明

示例1:将数字转换为二进制字符串

假设我们需要将一个数字转换为二进制字符串,可以采用以下方法:

int num = 10;
string binString = "";
for(int i = 31; i >= 0; i--) //我们假设num是一个32位有符号整数
{
    binString += to_string((num >> i) & 1);
}

以上代码中,我们循环从31到0,每次取出num右移i位后的最低位,将其放入二进制字符串中。

示例2:统计数字中二进制中1的个数

假设我们需要统计一个数字中二进制中1的个数,可以采用以下方法:

int num = 101; //二进制表示1100101
int count = 0;
while(num)
{
    count++;
    num &= (num - 1);
}

以上代码中,我们使用了Brian Kernighan在1988年发表的一篇著名论文中介绍的技巧,利用(num - 1) & num可以将num的二进制中最右边的一位1变成0的特性,不断地清除num中的1,直到所有的1都被清除完毕。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++位操作的常见用法小结 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 如何防止路由器被劫持 预防路由器劫持的八大方法介绍

    如何防止路由器被劫持 路由器劫持是一种网络安全问题,攻击者可以通过劫持你的路由器来窃取你的个人信息、窃取你的帐号密码或让你受到其他的网络攻击。为了防止这种情况发生,可以采取以下八大方法。 1.保持路由器软件及时更新 在任何时候,都应该确保你的路由器软件都是最新的版本。根据生产商的官方指南来安装所有的更新,并考虑在需要的时候同步固件。及时更新路由器软件可以修复…

    other 2023年6月27日
    00
  • 单页应用SPA做SEO的一种清奇的方案

    单页应用SPA做SEO的一种清奇的方案 背景 随着前端技术的不断发展,越来越多的网站开始采用前后端分离的方式进行开发。单页应用(SPA)作为前后端分离方案中的一种,在用户体验上有着独特的优势。 然而,SPA和传统的多页应用相比,在SEO方面存在一些挑战。由于SPA的页面内容大多是通过AJAX异步获取,浏览器不会触发页面跳转,导致搜索引擎无法爬取到页面的内容,…

    其他 2023年3月28日
    00
  • Vue2.0 UI框架ElementUI使用方法详解

    Vue2.0 UI框架ElementUI使用方法详解 什么是ElementUI? ElementUI是一套基于Vue.js 2.0的桌面端组件库。它是在饿了么前端团队研发过程中产生的,并且一直得到了广泛的应用和维护,目前为止已经有29000+个星标和8500+个fork,成为了Vue.js社区中最受欢迎的组件库。 如何安装ElementUI? 你可以使用np…

    other 2023年6月27日
    00
  • python项目中requirements.txt的用法实例教程

    Python项目中requirements.txt的用法实例教程 在Python项目中,requirements.txt文件是一种常见的用于管理项目依赖的文件。它可以帮助我们记录项目所需的所有第三方库及其版本信息,以便在不同环境中重现项目的依赖关系。下面是一个详细的攻略,介绍了如何使用requirements.txt文件。 创建requirements.tx…

    other 2023年8月3日
    00
  • vue中自定义右键菜单插件

    下面我就来详细讲解一下 Vue 中如何自定义右键菜单插件。 步骤一:安装依赖 首先需要安装如下两个依赖: npm install -S vue-context-menu npm install -S font-awesome 其中,vue-context-menu 是自定义右键菜单插件的基础依赖,而 font-awesome 则是为了演示菜单项中的图标效果。…

    other 2023年6月27日
    00
  • ubuntu18.04配置机场客户端

    Ubuntu 18.04配置机场客户端攻略 以下是Ubuntu 18.04配置机场客户端的完整攻略: 步骤1:安装VPN 打开终端,输入以下命令安装OpenVPN: sudo apt-get update sudo apt-get install openvpn 等待安装完成后,输入以下命令检查OpenVPN版本: openvpn –version 如果显…

    other 2023年5月6日
    00
  • Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】

    Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】 1. TCP/IP协议简介 TCP: 面向连接的传输控制协议 IP: 网际协议,负责把数据从一个网络节点传送到另一个网络节点。 TCP/IP 协议是互联网的基础协议,是互联网最重要的基础设施之一。 2. Python中的 socket 套接字 Python 中的 socket 模…

    other 2023年6月27日
    00
  • Solr全文检索框架

    Solr全文检索框架的完整攻略 Solr是一个基于Lucene的全文检索框架,可以用于快速、准确地搜索和分析大量文本数据。在本文中,我们将提供一个完整的Solr全文检索框架攻略,包括Solr的基本概念、配置和使用方法,并提供两个示例说明。 Solr的基本概念 Solr的基本概念包括以下几个方面: 文档(Document):Solr中的文档是指需要进行检索的数…

    other 2023年5月5日
    00
合作推广
合作推广
分享本页
返回顶部