C++ 位操作
计算机无法理解我们交流时使用的高级语言。因此,存在一种标准方法,通过该方法将任何发给计算机的指令转换为计算机可以理解的方式。在基本层面上,每个指令都被转换为一些称为比特的数字信息。一系列比特表示这是一条特定的指令。
位
位被定义为以数字符号存储数据的基本单元。
有两个值来表示它如下 –
1 – 它表示信号存在或为True
0 – 它表示信号不存在或为False
位表示任何指令的逻辑状态。一系列位有一个基数为2。因此,如果我们说有一系列二进制数字,它从左到右读取,而2的幂增加。
所以,在了解位的基础知识之后,让我们了解在C++中如何处理位。
位操作
位操作被定义为对n位数字的位级进行一些基本操作。它是一种高速和原始的方法,因为它直接在机器端工作。
有了这个基础,让我们进入C++中位操作的基础知识。
- 逻辑与
逻辑与接受两个操作数,如果它们都为真则返回真。符号是&&。
让我们看一下逻辑与运算符的真值表。
C++程序
#include
using namespace std;
int main() {
int a = 5;
int b = 9;
// false && false = false
cout << ((a == 0) && (a > b)) << endl;
// false && true = false
cout << ((a == 0) && (a < b)) << endl;
// true && false = false
cout << ((a == 5) && (a > b)) << endl;
// true && true = true
cout << ((a == 5) && (a < b)) << endl;
return 0;
}
输出:
- 逻辑或(Logical OR)
逻辑或运算符在两个操作数中的任意一个输入为高时,给出高的输出。符号为||
让我们来看一下逻辑或运算符的真值表。
在这里我们可以看到第一行。输入A和B都是低电平,这导致输出是0(低电平)。
C++程序
#include
using namespace std;
int main() {
int a = 5;
int b = 9;
// false && false = false
cout << ((a == 0) || (a > b)) << endl;
// false && true = true
cout << ((a == 0) || (a < b)) << endl;
// true && false = true
cout << ((a == 5) || (a > b)) << endl;
// true && true = true
cout << ((a == 5) || (a < b)) << endl;
return 0;
}
输出:
- 逻辑非
逻辑非只取一个操作数并将其反转。如果操作数是低的,它将使其变为高的,反之亦然。符号为!。
让我们来看看逻辑非运算符的真值表。
C++程序
#include
using namespace std;
int main() {
int a = 5;
// !false = true
cout << !(a == 0) << endl;
// !true = false
cout << !(a == 5) << endl;
return 0;
}
输出:
- 左移运算符
左移运算符接受一个操作数,并且左操作数的值向左移动指定右操作数位数的位。
它的符号是<<
。
C++程序
#include
using namespace std;
int main()
{
// a = 5(00000101), b = 9(00001001)
unsigned char a = 5, b = 9;
// The result is 00001010
cout << "a<<1: "<< (a<<1) << "\n";
// The result is 00010010
cout << "b<<1: " << (b<<1);
return 0;
}
输出:
- 位右移运算符
位右移运算符接受一个操作数,其右操作数的值将被向右移动指定的位数。
它的符号为 >>
。
C++程序
#include
using namespace std;
int main()
{
// a = 5(00000101), b = 9(00001001)
unsigned char a = 5, b = 9;
// The result is 00000010
cout<< "a>>1: " << (a >> 1) << "\n";
// The result is 00000100
cout<< "b>>1: " << (b >> 1);
return 0;
}
输出: