关于位运算

位运算是在二进制中的运算方式,所有其他进制的数在进行位运算时都要先转化成二进制数再进行运算
位运算主要包括按位与(&)、按位或(|)、按位异或(^)、取反( ~ )、左移(<<)、右移(>>)
其中除了取反( ~ )以外,其他的都是二目运算符,即要求运算符左右两侧均有一个运算量

二进制补码
正数的补码与原码相同
负数的补码是原码取反再加一
例如-5:
先写出5的原码
原码: 0000 0000 0101
反码:1111 1111 1010
补码:1111 1111 1011
所以-5的二进制码为1111 1111 1011

按位与(&)
运算的两个数,转换算为二进制后,进行与(&)运算
当相应位上对应的数都是1时,该位取1,否则该为0
例如:
5 & -5
5:0000 0000 0101
-5:1111 1111 1011
答案:0000 0000 0001

按位或(|)
运算的两个数,转换为二进制后,进行或(|)运算。
只要相应位上存在1,那么该位就取1,如果都不为1,就为0
例如:
5 | -5
5:0000 0000 0101
-5:1111 1111 1011
答案:1111 1111 1111

按位异或(^)
运算的两个数,转换成二进制数后,进行异或(^)运算
如果相应位置上的数相同,该位取0,如果不同改位取1
例如:
5 ^ -5
5 :0000 0000 0101
-5:1111 1111 1011
答案:1111 1111 1110

左移(<<)
将一个数二进制下的数向左移若干位
比如 x << y 就是将二进制下的x 向左移 y 位
例如:
5:0000 0000 0101
5 << 5:
0000 1010 0000
在十进制下等于160

在十进制中,一个数每乘一次10就向左进一位
那么在二进制中,同十进制一样,二进制中每乘一次2就向左进一位
那么一个数左移x 就等价于一个数乘2^x

右移(>>)
将一个数在二进制下右移若干位
比如 x >> y 就是将二进制下的x 向右移 y 位
例如:
5:0000 0000 0101
5 >> 2:
0000 0000 0001

这里与左移类似,十进制下每除10整数位就退一位
那么右移几位就等价于除了几次2
同时右移运算是向下取整的

PS:
位运算可用于状态压缩,用0,1来表示物品的状态。
例如:现有n个物品,我们就可以用一个n位的二进制数来表示每一个物品的选取,若第i为1,表示选取第i个物品,若第i位为0,则表示不选取第i个物品。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你数过天上的星星吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值