C++中位运算指按二进制的形式运算,用以解决系统软件中的二进制待处理问题。
并且在c语言中位操作运算符只能操作整形操作数,即带符号或者无符号的char、short、int、long类型!
1.按位与 &
按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。这里的1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其实与逻辑上“与”的运算规则一致。逻辑上的“与”,要求运算数全真,结果才为真。若,A=true,B=true,则A∩B= true。
例如:
用途:
1.清零
2.取一些数中某些指定位
3.保留指定位
2.按位或 |
用途:
按位或运算常用来对一个数据的某些位定值 1;
3.按位异或 ^
用途:
1.使特定位翻转
2.与0异或,保留原值
3.交换两个值,不需要临时变量
void main()
{
a=a^b;
b=b^a;
a=a^b
}
例如:a=3,即 11;b=4,即100。
想将a和b的值互换,可以用以下赋值语句实现:
a=a^b;
b=b^a;
a=a^b;
a=011(2)
(^)b=100(2)
a=111(2)
(a^b的结果,a已变成7)
(^)b=100(2)
b=011(2)
(b^a的结果,b已变成3)
(^)a=111(2)
a=100(2)
(a^b的结果,a已变成4)
–等效于以下两步: ① 执行前两个赋值语句:“a=a^b;”
和“b=b^a;”
相当于b=b^ (a^ b);
② 再执行第三个赋值语句: a=a^ b。由于a的值等于(a^ b),b的值等于(b^ a^ b),因此,相当于a=a^ b^ b^ a^ b,即a的值等于a^ a^ b^ b^b,等于b。很神奇吧!
4.取反运算符 !
它是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。
5.左移运算符 <<
左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出则舍弃该高位。
6.右移运算符 >>
右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补0。对于有符号数,某些机器将对左边空出的部分用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分用0填补(即“逻辑移位”)。
7.位运算赋值运算符
位运算符与赋值运算符可以组成复合赋值运算符。
&=, |=, >>=, <<=, ^=
a & = b相当于 a = a & b
a <<= 2 相当于 a = a <<2
列举一些常见的二进制位变换操作: