日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

剑指Offer--二进制中1的个数

發(fā)布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 剑指Offer--二进制中1的个数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題描述:輸入一個整數(shù),輸出該數(shù)二進制表示中1的個數(shù)。其中負數(shù)用補碼表示。

思路:

  解法1:把n與1做與運算,判斷n的最低位是不是1;接著把1左移1位,然后跟n做與運算,判斷n的次低位是不是1;...;反復左移,每次都能判斷n的其中一位是不是1.

  解法2:如果一個整數(shù)不為0,則該整數(shù)至少有一位是1。如果把這個整數(shù)減1,那么整數(shù)最右邊的1會變成0,如果整數(shù)最右邊1后還有0,那么最右邊的1變成0,其后的0均變成1,該位左邊的數(shù)不變。然后將n-1和n做與運算,最右邊的1位處及其后所有位都將變?yōu)?,其前所有位不變。那么一個數(shù)有多少個1,就可以進行多少次這樣的操作。

  例:一個二進制數(shù)1100,從右邊數(shù)起第三位是處于最右邊的一個1。減去1后,第三位變成0,它后面的兩位0變成了1,而前面的1保持不變,因此得到的結(jié)果是1011.我們發(fā)現(xiàn)減1的結(jié)果是把最右邊的一個1開始的所有位都取反了。這個時候如果我們再把原來的整數(shù)和減去1之后的結(jié)果做與運算,從原來整數(shù)最右邊一個1那一位開始所有位都會變成0。如1100&1011=1000.

代碼:

public class Solution{//算法1public int NumberOf1(int n){int count = 0;int flag = 1;while(n!=0){if((n&flag)!=0)count++;flag=flag<<1;}return count;} //算法2public int NumberOf2(int n){int count = 0;while(n!=0){count++;n=(n-1)&n;}return count;} }

?

轉(zhuǎn)載于:https://www.cnblogs.com/xiaoxli/p/9455538.html

總結(jié)

以上是生活随笔為你收集整理的剑指Offer--二进制中1的个数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。