位运算总结

共有四种逻辑运算:与,或,非,异或。

移位运算:左移,右移实现乘法。注意一般左移时没有疑问,后面补0。右移时,不同的编译器有不同的解释,一般的是如果即左最高位为0,则右移时还用0补齐,否则是1的话(unsigned或负数),用1补齐。

加减乘除运算,严格意义上来说,十进制的加减乘除就是位运算加减乘除得来的。属于注意加法在最高位会溢出,即最高位1 + 1 = 0,没有进位。还有减法等。(对这个不熟,以后再看)。

一些常用的技巧(利用1, 0 的与,或设置位,因为是逻辑运算,所以不影响其他位。(不要死记硬背,否则记错的话,发现不了问题,理解就可以呢):

a ^ (~a) = 1s (1s表示一串1,负的最小数)。 将最右边的n 位 清零,清零即与0 与,a & ( ~0 << n).

获取某一位:两种方法,将其右移n位,然后与1 与。或者将1 左移n 位,然后与这个数与。 置位,即将此位置位0,这个数与111110111111(随便写的,将1左移,然后取反)且,则其他位不变,这个位变为0。将此位置位1,则与000000100000000或。还有一些其他做法。

找出一个十进制数的二进制位串中,所有的1 。此题直观的方法有两种,循环将1左移(0001000),然后与,得到的值不为0,则此位为1。第二种方法,循环右移这个数,然后与1 与。这种方法如果不知道要循环多少次,而只是判断移过后,得到的这个数不为0,即 while(n),则如果碰到最高位为1的数时,会出现死循环。

还有一种方法,常用,在其他算法中也常用,先将这个数减1,然后与自己与,则自己的最右边一个数变为0。不管对什么都适用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值