位運算之取二進制數字的最高/低位的1的數值


1.取最低,由於已知x&(x-1)是將最后一個1變成0(前篇已經解釋了),那么x-x&(x-1)即是最后一位1的數值。

2.取最高,先看代碼:

unsigned hight_bit(unsigned x)
{
                  //x=0010 1100 0000 0000 0000 0000 0000 0000 0000 0001 x= x|(x>>1); //0011 1110 0000 0000 0000 0000 0000 0000 0000 0000 x= x|(x>>2); //0011 1111 1000 0000 0000 0000 0000 0000 0000 0000 x= x|(x>>4); //0011 1111 1111 1000 0000 0000 0000 0000 0000 0000 x= x|(x>>8); //0011 1111 1111 1111 1111 1000 0000 0000 0000 0000 x= x|(x>>16); //0011 1111 1111 1111 1111 1111 1111 1111 1111 1111 x= x|(x>>32);        //通常使用可以省略32 return (x+1) >> 1; //0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 = x+1 , 那么右移一次即可 }

將最高位的1向后擴散到比它低的所有位置,
再加一,就會得到高於最高位1個的數,所以右移一下就OK。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM