您的位置:首页 > 编程语言 > C语言/C++

C++基础---位操作符

2015-08-16 07:55 295 查看

1. 位操作符

1.1 位操作的定义

位操作:整数特有的操作

位操作:<< 、>>、&、|、^、~共六个操作。

1.2 左移操作

左移操作“<<”:将整数最高位(左端)挤掉,而在右端补0。

short int a = 12;//a为0000000000001100
a = a<<1;        //a为0000000000011000
=>得到a=24;
左移1位相当于乘2,不管整数a是否有符号。


1.3 右移操作

右移操作“>>”:是在整数的高位挤一个0或1进去,而整数右边的1或0被挤掉。

有符号整数,若最高位是1,则高位挤进1,若最高位是0,则高位挤进0。

无符号整数,则一律高位挤进0。

short int a = -2;//a为1111111111111110
a = a>>1;        //a为1111111111111111
=>得到a=-1;
unsigned short int b=65535;//b为1111111111111111
b = b>>1;                  //b为0111111111111111
=>得到b=32767;


1.4 位与操作

位与操作“&”:将两个操作数每一位做与操作。

short int a=12;           //a为0000000000001100
short int b=6;  //b为0000000000000110
a = a & b;                //a为0000000000000100
=>得到a=4;


1.5 位或操作

位或操作“|”:将两个操作数每一位做或操作。

short int a=12;//a为0000000000001100
short int b=6; //b为0000000000000110
a = a | b;     //a为0000000000001110
=>得到a=14;


1.6 位异或操作

位异或操作“^”:将两个操作数每一位做异或操作,异或也称对称和,或称无进位加等,若两个操作数相等(都为0或都为1,则其值为0,否则为1),对应位不同取1,对应位同为1取反为0,对应位同为0不做处理。

short int a=12;//a为0000000000001100
short int b=6; //b为0000000000000110
a = a ^ b;     //a为0000000000001010
=>得到a=10;


1.7 位反操作

位反操作“~”:将一个操作数每一位取反,0变成1,1编程0。

short int a=12;//a为0000000000001100
a = ~a ;       //a为1111111111110011
=>得到a=-13;


1.8 位操作也有对应的复合赋值操作

a <<= 5; <=> a = a << 5;

a >>= 5; <=> a = a >> 5;

a &= b;  <=> a = a & b;

a |= b;  <=> a = a | b;

a ^= b;  <=> a = a ^ b;

1.9 位操作实例

位操作可以帮助实现一些很强调空间的计算,系统编程中的状体位截取肯定用位操作,它也是标准库中bitset容器类的实现基础,有许多问题用位操作实现颇为有效。

#include<iostream>

using namespace std;
void print(int n)
{
cout<<(n&16 ? "A":"~A")<<" "
<<(n&8  ? "B":"~B")<<" "
<<(n&4  ? "C":"~C")<<" "
<<(n&2  ? "D":"~D")<<" "
<<(n&1  ? "E":"~E")<<" "
<<endl;
}
int main()
{
for(int n=0; n<32; n++)
{
bool A=n&16, B=n&8, C=n&4, D=n&2, E=n&1;
if(A && !B) continue;
if(!D && !E) continue;
if(B == C) continue;
if(C != D) continue;
if(E && !(A && B)) continue;
print(n);
}

system("pause");
return 0;
}
=>编译警告:
1>warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告)
1>warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告)
1>warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告)
1>warning C4800: “int”: 将值强制为布尔值“true”或“false”(性能警告)
=>~A ~B   C    D ~E
A  B  ~C   ~D  E


参考文献:

[1]《C++程序设计教程(第二版)》钱能——第四章

[2] 百度搜索关键字:C++运算符、位操作符、位操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: