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日

相关文章

  • C盘哪些文件可以删除?最全的C盘可删除文件清单汇总

    C盘可删除文件清单攻略 C盘是计算机系统的主要盘符,存储着操作系统和其他重要文件。然而,有些文件可以被删除以释放磁盘空间。在删除任何文件之前,请确保您了解其功能和影响,并备份重要数据。 以下是一些常见的C盘可删除文件的清单: 1. 临时文件 临时文件是由应用程序和系统生成的临时数据文件。它们通常位于以下目录中: C:\Windows\Temp C:\User…

    other 2023年8月2日
    00
  • win10怎么去掉radeon设置? radeon右键菜单删去方法

    以下是详细讲解“win10怎么去掉radeon设置?radeon右键菜单删去方法”的完整攻略。 问题简述 在使用Windows 10系统时,右键点击桌面、任务栏或文件夹时,可能会出现AMD的Radeon设置选项。有些用户不需要这个选项,想要去掉它。那么如何在Windows 10系统中去掉Radeon设置呢? 解决方案 方案1:卸载AMD Radeon软件 如…

    other 2023年6月27日
    00
  • 基于WPF实现简单的下拉筛选控件

    我会详细讲解基于WPF实现简单的下拉筛选控件的完整攻略。该控件可以用于Windows应用程序中,用于实现下拉菜单中的筛选选项。 步骤一:创建WPF项目 首先,我们需要创建一个WPF项目。 打开Visual Studio,并选择创建新项目。 在弹出的新项目窗口中,选择”Visual C#”分类,并选择”WPF应用程序”。 为项目设置名称,并选择保存路径,最后点…

    other 2023年6月26日
    00
  • iOS9.3.3越狱出现Sub-process/usr/bin/dpkg returned an error code(2)解决方法介绍

    iOS9.3.3越狱出现Sub-process/usr/bin/dpkg returned an error code(2)解决方法介绍 问题简述 在进行iOS 9.3.3越狱过程中,有时会出现Sub-process/usr/bin/dpkg returned an error code(2)错误提示。该提示意味着越狱进程在执行”dpkg”命令(Debian…

    other 2023年6月28日
    00
  • win11小部件怎么隐藏/禁用/卸载? win11小组件的相关操作技巧

    一、Win11小部件的隐藏方法 Win11小部件在桌面右下角的任务栏中默认是显示状态,如果不想让它们一直占用桌面空间,我们可以采取以下方法进行隐藏: 鼠标右键单击任务栏中的小部件区域,选择“小部件设置”; 在弹出的小部件设置窗口中,将“开启/关闭小部件”开关切换至关闭状态即可。 示例说明:假设我想隐藏Win11小部件,我可以按照上述步骤来操作。将小部件设置窗…

    other 2023年6月25日
    00
  • rancher2—了解什么是rancher以及简单部署

    rancher2—了解什么是rancher以及简单部署 什么是rancher rancher 是一个开源的管理、部署和维护容器化应用的平台。使用 rancher 可以方便地管理多个集群或多个云端平台,支持多种容器引擎,如 Docker、Kubernetes 等,并集成了更多的组件,比如 Helm、Prometheus、Istio 等,为用户提供了更全面的…

    其他 2023年3月29日
    00
  • windows磁盘API实践

    Windows磁盘API实践 在Windows系统上,文件/目录的操作离不开磁盘的读写操作。而在程序中进行磁盘读写操作的API有很多,各自有自己的特点和适用场景。这篇文章将介绍几种Windows磁盘API的使用方法,包括CreateFile、ReadFile、WriteFile等。 CreateFile CreateFile是用于创建或打开文件、目录、磁盘等…

    其他 2023年3月28日
    00
  • 一文学会Flex布局 – Nicander – 博客园

    一文学会Flex布局 – Nicander – 博客园 什么是Flex布局 Flex布局是指弹性盒模型,是一种用于页面布局的模型。Flex布局可以使用在普通的块级元素上,或者被应用到一个容器元素上。 在容器元素上应用Flex布局,容器的子元素将会改变它们在容器中的排列方式,包括它们的方向,对齐方式以及它们的大小。这种方式可以给我们带来更好的灵活性和响应式设计…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部