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

yizhihongxing

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日

相关文章

  • SQL SERVER 2005数据库还原的方法

    SQL SERVER 2005数据库还原的方法 1. 准备工作 在进行SQL SERVER 2005数据库还原之前,我们需要进行一些准备工作,包括: 1.备份文件:数据库还原需要依赖于备份文件,因此我们需要先准备好数据库备份文件。 2.还原的目录:数据库备份文件需要还原到指定的目录,因此我们需要确定还原的目录。 3.登录权限:进行数据库还原需要具备管理员权限…

    other 2023年6月26日
    00
  • vue element封装form表单的实现

    让我们来详细讲解一下“vue element封装form表单的实现”的完整攻略。 确定需求 在封装form表单之前,需要先确定需求,包括要封装的表单项、表单验证方式等。 安装依赖 使用vue element库来构建我们的表单组件,需要先安装它。可以使用以下命令进行安装: npm install element-ui -S 创建表单组件 在项目中创建一个新的组…

    other 2023年6月25日
    00
  • edittext中禁止输入中文的方法

    EditText中禁止输入中文的方法 在Android开发中,我们经常需要在EditText中输入文本。但有时候我们不希望用户输入中文,要怎么实现呢?本文将介绍两种方法。 方法一:设置输入类型为英文和数字 我们知道,在Android的输入法中,除了中文输入法外,还有许多其他的输入法,如英文输入法、数字输入法等。我们可以把EditText的输入类型设置为只能使…

    其他 2023年3月28日
    00
  • 用注册表优化NTFS 提高计算机系统性能

    标题:使用注册表优化NTFS提高计算机系统性能 介绍:NTFS是Windows操作系统上常用的文件系统之一,优化NTFS可以提高计算机系统的性能。本文将详细讲解如何使用注册表来优化NTFS。 步骤一:备份注册表 在编辑注册表前,务必备份注册表以防止不可预知的错误。具体步骤如下: 点击Windows菜单,输入“regedit”打开注册表编辑器。 选择“文件”-…

    other 2023年6月27日
    00
  • Java类继承关系中的初始化顺序实例详解

    Java类继承关系中的初始化顺序实例详解 一、前言 在Java类继承关系的实例化过程中,子类的初始化会涉及到父类的初始化,这个过程的顺序往往会影响程序的执行结果。本文将详细讲解Java类继承关系中的初始化顺序。 二、初始化顺序 在Java中,类和对象的初始化有以下几种情况: 静态代码块(只在类加载时执行一次) 非静态代码块(每次创建对象时都会执行) 构造方法…

    other 2023年6月20日
    00
  • 学习如何书写整洁规范的HTML标记

    学习如何书写整洁规范的HTML标记攻略 HTML是一种用于创建网页的标记语言,编写整洁规范的HTML标记对于构建可维护和易于理解的网页至关重要。下面是一个详细的攻略,帮助你学习如何书写整洁规范的HTML标记。 1. 使用语义化的标签 语义化的标签能够更好地描述内容的结构和含义,使得网页更易于理解和维护。以下是一些常用的语义化标签: <header&gt…

    other 2023年7月28日
    00
  • SpringBoot整合WebService的实现示例

    针对“SpringBoot整合WebService的实现示例”,我们可以按照以下步骤进行整合。 1. 添加依赖 在项目的pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo…

    other 2023年6月27日
    00
  • Win10一周年更新14393.1480更新补丁KB4025339下载地址

    Win10一周年更新14393.1480更新补丁KB4025339下载地址攻略 简介 Win10一周年更新14393.1480是Windows 10操作系统的一个重要更新补丁,它修复了一些安全漏洞和系统稳定性问题。本攻略将详细介绍如何下载和安装这个更新补丁。 步骤 打开浏览器,进入微软官方网站。 在微软官方网站的搜索框中输入“Win10一周年更新14393.…

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