[筆試面試] 對x&(x-1)的理解


原文地址:http://blog.csdn.net/zhulei632/article/details/6767535

首先只看x&(x-1), 其作用是去掉二進制表示的最右邊一位1.
假設x的二進制為:***10...0
則x-1二進制表示:***01...1
所以結果x&(x-1): ***00...0
上述結論是正確的.

筆試面試中常有這兩個題目:

題目-1 下面這個函數func(x)的作用是什么? func(9999)的結果為( )?

int func(int x)
{
    int countx = 0;
    while(x)
    {
        countx++;
        x = x&(x-1);
    }
    return countx;
}


 

答:網上見到的答案多半是這樣: func(x)的作用是計算x二進制表示中1的個數, func(9999)結果為8.
參數為整數絕對沒錯, 但要為負數呢? 為此,我專門試驗過,func(-9999)的結果為25.仔細一想,和整數在內存中表示有關, 動手畫一畫,-9999的補碼表示中剛好25個1.
所以,更為嚴謹的答案應該為: func(x)的作用是計算x二進制補碼表示中1的個數, func(9999)結果為8.

題目-2: 判斷一個數是否為2的n次方
答:利用開頭的分析, 可以快速編碼 #define isPowerOfTwo(x) (0==x&(x-1))



--end--

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



對x&(x-1)的理解 【筆試面試考試】x&(x-1); 注意筆試題x=x&(x-1) x&(x-1)的含義 x&(x-1)的含義? x&(x-1)的實質 編程問題之:x=x&(x-1) x&(x-1)和x&(-x)的講解 x&(x-1) 表達式 位運算:x&(x-1)等
 
粤ICP备14056181号  © 2014-2020 ITdaan.com