聊一聊C 中的位操作符
创始人
2025-07-03 16:20:27
0

一、概述

C++中,位操作符是一种对二进制位进行操作的运算符,用于对二进制数进行位移、与、或、异或等操作。在C++中,有6个位操作符,包括左移运算符(<<)、右移运算符(>>)、按位与运算符(&)、按位或运算符(|)、按位异或运算符(^)和按位取反运算符(~)。这些运算符可以用于整数类型的变量,例如int、char、short、long等。

二、左移和右移运算符

左移运算符(<<)将一个数的二进制位向左移动指定的位数,右边用0填充。例如,将二进制数1010左移2位后,变为101000。右移运算符(>>)将一个数的二进制位向右移动指定的位数,左边用0填充。例如,将二进制数1010右移2位后,变为10。

示例代码:

#include   
using namespace std;  
  
int main() {  
   int num1 = 10;  // binary: 1010  
   int num2 = num1 << 2;  // left shift 2 bits, binary: 101000  
   int num3 = num1 >> 2;  // right shift 2 bits, binary: 10  
   cout << "num2: " << num2 << endl;  
   cout << "num3: " << num3 << endl;  
   return 0;  
}

三、按位与运算符

按位与运算符(&)对两个数的二进制位进行与操作,即两个相应的二进制位都为1时,结果为1,否则为0。

示例代码:

#include   
using namespace std;  
  
int main() {  
   int num1 = 10;  // binary: 1010  
   int num2 = 12;  // binary: 1100  
   int result = num1 & num2;  // result binary: 1000  
   cout << "result: " << result << endl;  
   return 0;  
}

四、按位或运算符

按位或运算符(|)对两个数的二进制位进行或操作,即两个相应的二进制位中只要有一个为1时,结果为1,否则为0。

示例代码:

#include   
using namespace std;  
  
int main() {  
   int num1 = 10;  // binary: 1010  
   int num2 = 12;  // binary: 1100  
   int result = num1 | num2;  // result binary: 1110  
   cout << "result: " << result << endl;  
   return 0;  
}

五、按位异或运算符

按位异或运算符(^)对两个数的二进制位进行异或操作,即两个相应的二进制位有一个为1且另一个为0时,结果为1,否则为0。

示例代码:

#include   
using namespace std;  
  
int main() {  
   int num1 = 10;  // binary: 1010  
   int num2 = 12;  // binary: 1100  
   int result = num1 ^ num2;  // result binary: 11010  
   cout << "result: " << result << endl;  
   return 0;  
}

六、按位取反运算符

按位取反运算符(~)对一个数的二进制位进行取反操作,即把每个二进制位上的1变为0,0变为1。

示例代码:

#include   
using namespace std;  
  
int main() {  
   int num1 = 10;  // binary: 1010  
   int result = ~num1;  // result binary: 0101  
   cout << "result: " << result << endl;  
   return 0;  
}

七、位操作符的优先级和结合性

在C++中,位操作符的优先级比较低,低于加减乘除等算术运算符,但高于赋值运算符。位操作符的结合性是从左到右,即先对左边的操作数进行操作,再对右边的操作数进行操作。

示例代码:

#include   
using namespace std;  
  
int main() {  
   int num1 = 10;  // binary: 1010  
   int num2 = 12;  // binary: 1100  
   int result = (num1 & num2) | (num1 ^ num2);  // result binary: 11110  
   cout << "result: " << result << endl;  
   return 0;  
}

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...