兩個與位運算有關的小問題

2022-02-13 15:24:12 字數 729 閱讀 6520

兩個與位運算有關的小問題

在讀《程式設計之美》一書時,書中提到兩個小問題:

1.如何求算n!的二進位制表示最低位1的位置。

2.如何用最簡便最快的方法判斷乙個正整數是否是2的方冪。

對於第乙個問題:對於任何乙個整數n,當表示成二進位制時,若最低位為1,則該數肯定是奇數,否則為偶數。若是奇數,則n肯定不含質因子2.例如9的二進位制形式是1001,最後一位位1,則肯定不含因子2,而12的二進位制形式是1100,則肯定含因子2.但是將1100右移2位就變成0011,即將12除以2^2,此時0011為奇數。從這裡可以發現乙個規律,要求乙個數的二進位制表示形式最低位1的位置,相當於求算n有多少個因子2。因為假如乙個整數表示成二進位制是r0r1r2.....rk.....rn,如果rk是最低位為1的位置,那麼從r(k+1)到rn都為0,此時將其右移(n-k)位,則rk在最低位,此時該二進位制必定不包含因子2,而將二進位制右移1位相當於除以2,即求算rk的位置相當於求算因子2的個數。而求算n!中含有2的個數很容易求算。

int location(int n)

return low;

}

對於第二個問題:如果乙個整數是2的方冪,即能表示成2^n的形式,則表示成二進位制必然是rn.....rk....r1r0,rn為1,其他所有的位都為0,此時 n & (n-1)的結果必然為0,因此只需判斷n & (n-1)的結果是否為0來判斷是否是2的方冪。

int judge(int n)

兩個小問題

最近實驗室的工作上碰到的兩個小問題,記錄一下。1.yuv顏色空間的gmm 之前用過很多次的在rgb上的混合高斯模型,最近需要對乙個yuv序列使用gmm方法建背景。因為有現成的 所以第乙個出現在腦海中的想法就是用公式把yuv轉成rgb之後,完了再轉回yuv。後來再回頭一想,完全不必要如此,因為gmm完...

MySQL的兩個小問題

近期打算離職,所以開始投簡歷重新找 的工作,然後 資本打 過來 面試,提了兩個問題,全沒答上來,其實是太久沒用mysql了啊,還有我工作就是不斷去試出來的,反正整理一下啦。有兩張表 如上圖a表和b表這樣子,一共有15個同學,想得到學號為1 15的學生的平均分,如果該項沒有成績就為0,怎麼操作?面試卡...

兩個C 的小問題

1.拷貝建構函式中的const adsrptplayliststatus adsrptplayliststatus other adsreport other 只有加const後才能正常的賦值 adsrptplayliststatus const adsrptplayliststatus other...