位运算


位运算都是按照二进制数进行运算

按位与运算

**运算规则:**只有两个数的二进制数同时为1,结果为1,否则为0.(负数以补码的形式参加按位于运算)
即0&0=0,0&1=0,1&0=0,1&1=1
特殊用途:
(1)清零:如果想将一个单元清零,只要与一个二进制都为0的数,结果就都为0
(2)取一个数的指定位:要一个数使其相应位为1,其余位为0,两个数相与即可。
例:设X=10101110,
取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;

按位或运算

**运算规则:**只要两个数的二进制数有一个为1,那么结果就为1.
即0|0=0,0|1=1,1|0=1,1|1=1.
**特殊用途:**常用来对数的某些位置变成1
方法:找到一个数使其需要变的位置为1,不需要变的位置为0,即可

异或运算

**运算规则:**两个数的二进制数的相应位置不相同,那么结果为1,否则为0.
即 0^ 0=0,0^ 1=1,1^ 0=1,1^ 1=0.
注:
(1)交换律:a^b =b^a
(2) 结合律:a^ b^c=a ^(b ^c)=(a ^b) ^ c
(3) 自反律:a^b ^b=a ^0=a
x ^x=0,x ^0=x
特殊用途:(1)使特定位翻转:找一个x对应位为1,其余位为0,两个数异或即可
例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。
(2)与0异或,保持原值
(3) 如果a^b=c,那么c ^b=a,c ^a=b.
(4) 交换两个数的值,且不需中间变量,无溢出风险,
a=a^b
b=b^a
a=a^b

取反运算符(~)

参加运算的数的二进制的对位进行取反
运算规则:~1=0,~0=1.
特殊用途:
使一个数的最低位为零,可以表示为:a&~1。
~ 1的值为1111111111111110,再按“与”运算,最低位一定为0。因为“~”运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符都高。

左移运算符(<<)

将一个数的二进制数全部左移(左边的二进制数丢弃,右边的二进制数补0)
a<<1== (a*=2)

右移运算符(>>)

将一个数的二进制数全部右移,正数左补0,负数左补1,右边丢弃
左补0 or 补1 得看被移数是正还是负。

复合运算符

位运算符与赋值运算符结合,组成新的复合赋值运算符,它们是:

&= 例:a &= b 相当于a=a & b

|= 例:a |= b 相当于a=a | b

> > =   例:a >> = b       相当于a=a >> b

<<= 例:a <<= b 相当于a=a << b

^= 例:a ^= b 相当于a=a ^ b
如果两个不同长度的数据进行位运算时,系统会将二者按右端对齐,然后进行位运算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值