C++提供了位运算操作符,使程序可以直接对内存进行操作。C++的这个特色大大提高了C++程序的执行能力。例如使用位操作运算可以将一个存储单位中的各个二进制位左移或右移一位,也可以将一个存储单位中所有的二进制位取反,这些操作多数要比直接进行数值上的运算要高效的多。
学习位运算之前,我们先来了解几个概念:
字节:字节是数据存储和数值计算的基本单位,也是从内存读取数据和写入数据的最小单位,单位是byte。
位:在操作系统中,字节还可以划分为更小的单位——位。一个字节由8个位组成,每个位的值为0或1,单位bit。
取反(~):即将1变成0,0变成1,也就是说:
~1=0;
~0=1;
取反就是将一个数的二进制码的补码取反,正数的补码是本身,负数的是按位取反加1.
且运算(&):或者叫与运算,基本的位运算符之一。形式为“数值1 & 数值2”,比方说:
1&0=0;
或运算(|):基本的位运算符之一,形式为“数值1|数值2”,比方说:
1|0=1;
移位运算:包括左移运算(<<)和右移运算(>>),形式为“数值1<<数值2”(>>同理)表示数值1的全部二进制位向左(右)移数值2位。
取反训练:
#include<iostream>
using namespace std;
int main(){
int a;
cin>>a;
cout<<hex<<a<<" "<<~a<<endl;
return 0;
}
移位操作训练:
由于二进制各位之间的关系恰位两倍,左移一位其实可以起到了乘以2的作用,右移一位则可以起到除以2的作用
#include<iostream>
using namespace std;
int main(){
int a;
a=5;
a=a<<2;
cout<<a<<endl;
return 0;
}