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技术站