位运算的应用

2020-02-13 16:01:43来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

位运算的应用

一、判断一个数字X的i位是不是1

方法:

   if((1 << (i-1)) & x > 0)  原理:   1左移(i-1)位,相当于制造了一个就i位上是1其他位都是0的一个二进制数。将这个数与X进行“与”运算,如果大于0,则代表第i位是1;否则是0
例子:   x = 13 (1101)2  i = 3  ∴ 1 << (i-1) = 1 << 2 = 1002 = 01002 (补上0)  ∴ (1 << (i-1)) & x  = 01002 & 11012  = 01002   因为其0100大于0,所以这i位是1

二、把一个数字二进制下的第i位改成1

方法:

   x = x | (1 << (i-1)) 

原理:

  与“一”类似,直接看”例子“吧  

例子:

  x = 13 (1101)2  i = 2

 ∴ 1 << (i-1) = 1 << 1 = 102 = 00102

 ∴ x | (1 << (i-1))

 = 11012 | 00102

 = 11112

三、把一个数字二进制下的最靠右的第一个1改成0(去掉

方法:

   x = x & (x-1) 

原理:

十进制下的数减了1后,二进制下的数最右边的1肯定会变成0,所以通过“与”一下就可以把最靠右的第一个1改成0

例子:

  x = 13 (1101)2

 ∴ x-1 = 12 = 11002

 ∴ x & (x-1)

 = 1101& 11002

 = 11002


原文链接:https://www.cnblogs.com/Little-Turtle--QJY/p/12305419.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:CodeForces Gym 100213F Counterfeit Money

下一篇:C++雾中风景番外篇4:GCC升级二三事