C++中的运算符总结(6):移位运算符
10、按位右移运算符( >>)和左移运算符( <<)
移位运算符将整个位序列向左或向右移动,其用途之一是将数据乘以或除以 2 n 2^n 2n。
下面的移位运算符使用示例将变量乘以2:
int doubledValue = num << 1; // shift bits one position left to double value
下面的的移位运算符使用示例将变量除以2:
int halvedValue = num >> 1; // shift bits one position right to halve value
以下程序演示了如何使用移位运算符将一个整数乘以或除以 2 n 2^n 2n:
#include <iostream>
using namespace std;int main()
{cout << "Enter a number: ";int inputNum = 0;cin >> inputNum;int halfNum = inputNum >> 1;int quarterNum = inputNum >> 2;int doubleNum = inputNum << 1;int quadrupleNum = inputNum << 2;cout << "Quarter: " << quarterNum << endl;cout << "Half: " << halfNum << endl;cout << "Double: " << doubleNum << endl;cout << "Quadruple: " << quadrupleNum << endl;return 0;
}
输出:
Enter a number: 16
Quarter: 4
Half: 8
Double: 32
Quadruple: 64
分析:
输入的数字为 16,其二进制表示为 1000。第 9 行将它向右移 1 位,结果为 0100,即 8,这相当于将其减半。第 10 行向右移两位,从 1000 变成了 00100,即 4。第 11 和 12 行的左移运算符的效果完全相反。向左移 1 位时结果为 10000,即 32,向左移动两位的结果为 100000,即 64,相当于将数字分别翻了一番和两番!
注意:
移位运算符不会旋转值。另外,对有符号数执行按位运算的结果随实现而异,在有些编译器上,向左移位时,并不会导致最低有效位的值变成最高有效位的值,而是将最低有效位设置为零。
该文章会更新,欢迎大家批评指正。
推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程