测试代码在最下方。
1. 与运算符:&
按位与运算是吧左右操作数对应每位进行逻辑与运算。规则是当左右操作数的二进制数的对应位数都为1时结果才为1,否则为0。
即:0&0=0;1&0=0,0&1=0,1&1=1.
2. 或运算符:|
按位或运算是吧左右操作数进行逻辑或运算,规则是只要左右操作数有一个1则结果就为1.
即:0|0=0,1|0=1,0|1=1,1|1=1;
3. 异或运算符:^
按位异或运算是左右操作数对应位相同则为0,不相同为1.一个数被同一个数进行两次异或运算其值不变。
即:1^1=0, 1^0=1, 0^1=1, 0^0=0;
4. 左移运算符:<<
左移运算是将操作数对应的二进制数向左移动指定位数,每移动一次相当于乘2,速度相对较快。
5. 右移运算符:>>
右移运算是将操作数对应的二进制数向右移动指定位数,每移动一次相当于除2,速度相对较快。
6. 按位取反运算符:~
这是单目运算,对操作数进行逻辑非运算,即把0变为1,1变为0.如~10=-11负数在计算机中用补码表示
7. 位运算复合赋值
位运算也像其它运算方法一样支持复合赋值运算,如:a&=10就等价于a=(a&10).其余同理。
#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
void binary(int n)
{
if(n==0) return;
binary(n/2);
cout<<n%2;
}
int main()
{
int a,b;
cin>>a>>b;
cout<<"binary("<<a<<")=";binary(a);cout<<endl;
cout<<"binary("<<b<<")=";binary(b);cout<<endl;
cout<<"a&b="<<(a&b)<<endl;
cout<<"a|b="<<(a|b)<<endl;
cout<<"a^b="<<(a^b)<<endl;
cout<<a<<"<<"<<b<<"="<<(a<<b)<<endl;
cout<<a<<">>"<<b<<"="<<(a>>b)<<endl;
cout<<"~"<<a<<"="<<(~a)<<endl;
return 0;
}
运行结果
输入:
20 3
输出:
binary(20)=10100
binary(3)=11
a&b=0
a|b=23
a^b=23
20<<3=160
20>>3=2
~20=-21