C++教程-C++位操作
C++位操作
计算机无法理解我们使用的高级语言。因此,为了让计算机理解,有一种标准方法,即将给定的指令转换为一些称为位的数字信息。位的序列表示特定的指令。
位
位被定义为以数字形式存储数据的基本单元。
它有两个值,表示如下:
1 - 表示信号存在或为真
0 - 表示信号不存在或为假
位表示任何指令的逻辑状态。位的序列具有基数为2。因此,如果我们有一系列二进制数字,它是从左到右读取的,而2的幂则递增。
因此,在了解位的基础知识后,让我们了解C++中的位操作。
位操作
位操作被定义为对n个数字的位级别执行一些基本操作。它是一种速度快且基本的方法,因为它直接在机器端工作。
让我们进入C++中位操作的基础知识。
- 逻辑与
逻辑与取两个操作数并在两者都为真时返回true。符号是&&。
让我们看一下与运算符的真值表。
在最后一行,A和B都为高,导致高输出。
C++程序
#include <iostream>
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;
}
输出:
- 逻辑或
逻辑或在两个操作数中的任一个输入高时给出高输出。符号是||。
让我们看一下或运算符的真值表。
在这里我们可以看到第一行。输入A和B都是低,结果是0(低输出)。
C++程序
#include <iostream>
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 <iostream>
using namespace std;
int main() {
int a = 5;
// !false = true
cout << !(a == 0) << endl;
// !true = false
cout << !(a == 5) << endl;
return 0;
}
输出:
- 左移运算符
左移运算符采用一个操作数,并将左操作数的值向左移动指定的位数。
它用<<表示。
C++程序
#include<iostream>
using namespace std;
int main()
{
// a = 5(00000101), b = 9(00001001)
unsigned char a = 5, b = 9;
// 结果为00001010
cout << "a<<1: "<< (a<<1) << "\n";
// 结果为00010010
cout << "b<<1: " << (b<<1);
return 0;
}
输出:
- 右移运算符
右移运算符采用一个操作数,并将右操作数的值向右移动指定的位数。
它用>>表示。
C++程序
#include <bits/stdc++.h>
using namespace std;
int main()
{
// a = 5(00000101), b = 9(00001001)
unsigned char a = 5, b = 9;
// 结果为00000010
cout<< "a>>1: " << (a >> 1) << "\n";
// 结果为00000100
cout<< "b>>1: " << (b >> 1);
return 0;
}
输出: