每日算法(五) 数论

一、int 中的最大值和最小值

        INT_MAX 0X7fffffff        2147483647

        INT_MIN 0X80000000    -2147483648

二、 n&(n-1) 的妙用

      n&(n-1)作用:简单的来说将n的二进制表示中的最低位为1的改为0。

      先看一个简单的例子:

      n = 10000(二进制),则(n-1) = 01111

      n&(n-1) = 0

     从低位开始的第一个1变为0.

常用应用有两种:

    1. 判断二进制中1的个数.可以做做LeetCode上191Number of 1 Bits

    2. 求一个数是否是2的次幂(提示 n为常数 x为变量   x的n次方叫做幂函数,  n的x次方叫做指数函数,幂是乘方的意思,次方和次幂在数学上没有任何的区别)

     更多详细的妙用可以访问http://blog.csdn.net/u012965373/article/details/50592727

    对于求2,4,8等2的n次方的一些操作的时候我们可以使用位操作进行计算,

    例如求一个数是否是4的次幂

    我们可以通过((n&(n-1)) ==0)&&(n&0x55555555)   

    根据上面你的介绍我们可以知道通过前面这半段可以判断出这个元素是2的次幂,而通过后半段与上0x55555555能够让我们

    对前面的数进行筛选,比如 8 = 1000 ,4 = 0100   0x5 = 0101  通过与0x5一与就能将4的次幂的数筛选出来

    对于非2的次幂的数的一些操作我们还是通过常规的方式来判断余数等一些操作来处理,

    可以做一下LeetCode上的   Power of Three、Power of Two、Power of Four

 

你可能感兴趣的:(C++,算法)