C++ 位运算符 OR(|), AND(&), XOR(^), 取反, 左移, 右移

在这里插入图片描述

注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/101105913


C++ 按位运算符 OR(|), AND(&), XOR(^)

1 | 按位或运算符

OR(|) 对两个整数值进行操作,生成一个新的值。现将两个数写成二进制,然后将每位进行逻辑或操作(两个值只要有1,结果为1,否则为0)。例如:
(1)

	int a = 1;
	int b = 1;
	int c =( a | b);
	cout << c << endl;

c=1


(2)

	int a = 0;
	int b = 1;
	int c =( a | b);
	cout << c << endl;
	cout << endl;

c=1


(3)

	int a = 0;
	int b = 0;
	int c =( a | b);
	cout << c << endl;

c=0


(4)

	int a = 1;
	int b = 2;
	int c =( a | b);
	cout << c << endl;
	cout << endl;

先将1,2分别转为二进制,01,10。然后进行或操作,二进制结果为11,转为十进制为3.
因此 c=3 .


2 & 按位与运算符

AND(&) 对两个整数值进行操作,生成一个新的值。现将两个数写成二进制,然后将每位进行逻辑与操作(两个值都为1,结果为1,否则为0)。例如:

(1)

	int a = 1;
	int b = 1;
	int c =( a & b);
	cout << c << endl;

c=1


(2)

	int a = 1;
	int b = 0;
	int c =( a & b);
	cout << c << endl;

c=0


(3)

	int a = 0;
	int b = 0;
	int c =( a & b);
	cout << c << endl;

c=0


(4)

	int a = 1;
	int b = 2;
	int c =( a & b);
	cout << c << endl;

先将1,2分别转为二进制,01,10。然后进行与操作,二进制结果为00,转为十进制为0.
因此 c=0 .


3 ^ 按位异或运算符

XOR(^) 对两个整数值进行操作,生成一个新的值。现将两个数写成二进制,然后将每位进行逻辑异或操作(两个值不同时结果为1,两个值相时结果为0)。例如:

(1)

	int a = 1;
	int b = 1;
	int c =( a ^ b);
	cout << c << endl;

c=0


(2)

	int a = 0;
	int b = 1;
	int c =( a ^ b);
	cout << c << endl;

c=1


(3)

	int a = 0;
	int b = 0;
	int c =( a ^ b);
	cout << c << endl;

c=0


(4)

	int a = 1;
	int b = 2;
	int c =( a ^ b);
	cout << c << endl;

先将1,2分别转为二进制,01,10。然后进行异或操作,二进制结果为11,转为十进制为3.
因此 c=3 .


4 ^ 求反运算符

求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。

例如~9 的运算为:
~(0000000000001001) 结果为: 1111111111110110


5 << 左移运算符

左移运算符“ <<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补 0。

左移相当于该数乘以2的n次方。

例如:
      a<<4;
指把 a 的各二进位向左移动 4 位。如 a=00000011(十进制 3),左移 4 位后为 00110000(十进制 48)。(可以理解a的二进制左移4位,右边补0)

问:
A) i=i*8;
B) i=i<<3;
A和B哪个语句执行速度快?
答案:选项B速度快


6 >> 右移运算符

右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位, “>>”右边的数指定移动的位数。

右移相当于该数除以2的n次方,前提是数据不能丢失。

例如:
设 a=15;
      a>>2;
表示把 000001111 右移为 00000011(十进制 3)。(可以理解a的二进制右移2位,左边补0)

问:
A) i=i/8;
B) i=i>>3;
A和B哪个语句执行速度快?
答案:选项B速度快



位运算度的意义: 通过位运算符可以对数据的操作精确到每一位。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页