位运算2

 本人水平有限,题解不到为处,请多多谅解

 本蒟蒻谢谢大家观看

参照这篇博客+自己的理解,以下内容也部分复制自qxAi的这篇博客,这里谢谢博主

这篇博客https://blog.csdn.net/u011077606/article/details/43487421

1.判断一个数字x二进制下第i位是不是等于1。

方法:if ( ( ( 1 << ( i - 1 ) ) & x ) > 0)

将1左移i-1位,相当于制造了一个只有第i位上是1,其他位上都是0的二进制数。然后与x做与运算,如果结果>0,说明x第i位上是1,反之则是0。

2.将一个数字x二进制下第i位更改成1;

方法:x = x | ( 1<<(i-1) )

将1左移i-1位,相当于制造了一个只有第i位上是1,其他位上都是0的二进制数。然后与x做或运算,保证x二进制下的第i位无论为多少,只要与1或运算,使得x二进制下的第i位为1;

3.把一个数字二进制下最靠右的第一个1去掉。

方法:x=x&(x-1)

因为相邻两个十进制数的末尾不是0就是1保证x的二进制数最靠右的第一个1所在的位置 yy 与  (x-1)的二进制数所在位置 yy 的值为0(读者可以自行验证),所以将其表示的二进制数进行与运算,保证x或的二进制最靠右的第一个1跟0进行与运算使得结果为0;

若还不理解的话,请参照本人的上一篇博客:位运算   

https://www.cnblogs.com/nlyzl/p/11277212.html

原文地址:https://www.cnblogs.com/nlyzl/p/11277469.html