首頁 - 網(wǎng)校 - 萬題庫 - 直播 - 雄鷹網(wǎng)校 - 團購 - 書城 - ? - 學習通 - 導航 -
首頁網(wǎng)校萬題庫直播雄鷹網(wǎng)校團購書城模考論壇實用文檔作文大全寶寶起名
2015中考
法律碩士
2015高考
MBA考試
2015考研
MPA考試
在職研
中科院
考研培訓
專升本
自學考試 成人高考
四 六 級
GRE考試
攻碩英語
零起點日語
職稱英語
口譯筆譯
申碩英語
零起點韓語
商務英語
日語等級
GMAT考試
公共英語
職稱日語
新概念英語
專四專八
博思考試
零起點英語
托?荚
托業(yè)考試
零起點法語
雅思考試
成人英語三級
零起點德語
等級考試
華為認證
水平考試
Java認證
職稱計算機 微軟認證 思科認證 Oracle認證 Linux認證
公 務 員
導游考試
物 流 師
出版資格
單 證 員
報 關(guān) 員
外 銷 員
價格鑒證
網(wǎng)絡編輯
駕 駛 員
報檢員
法律顧問
管理咨詢
企業(yè)培訓
社會工作者
銀行從業(yè)
教師資格
營養(yǎng)師
保險從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務
期貨考試
國際商務
心理咨詢
營 銷 師
司法考試
國際貨運代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護士
會計從業(yè)資格
基金從業(yè)資格
統(tǒng)計從業(yè)資格
經(jīng)濟師
精算師
統(tǒng)計師
會計職稱
法律顧問
ACCA考試
初級會計職稱
資產(chǎn)評估師
高級經(jīng)濟師
注冊會計師
高級會計師
美國注冊會計師
審計師考試
國際內(nèi)審師
注冊稅務師
理財規(guī)劃師
一級建造師
安全工程師
設備監(jiān)理師
公路監(jiān)理師
公路造價師
二級建造師
招標師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價工程師
注冊測繪師
質(zhì)量工程師
巖土工程師
注冊給排水
造價員考試
注冊計量師
環(huán)保工程師
化工工程師
暖通工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
消防工程師
監(jiān)理工程師
房地產(chǎn)估價
土地估價師
安全評價師
房地產(chǎn)經(jīng)紀人
投資項目管理師
環(huán)境影響評價師
土地登記代理人
寶寶起名
繽紛校園
實用文檔
入黨申請
英語學習
思想?yún)R報
作文大全
工作總結(jié)
求職招聘 論文下載 直播課堂
您現(xiàn)在的位置: 考試吧 > 軟件水平考試 > 復習資料 > 程序員 > 正文

2015年軟件水平考試程序員精選題(11)

來源:考試吧 2015-01-19 9:35:57 考試吧:中國教育培訓第一門戶 模擬考場
考試吧整理“2015年軟件水平考試程序員精選題(11)”供考生參考,更多軟件水平考試資訊和備考資料請關(guān)注考試吧軟件水平考試網(wǎng)。
  查看匯總:2015軟件水平考試程序員精選題匯總

  整數(shù)的二進制表示中1的個數(shù)

  題目:輸入一個整數(shù),求該整數(shù)的二進制表達中有多少個1。例如輸入10,由于其二進制表示為1010,有兩個1,因此輸出2。

  分析:這是一道很基本的考查位運算的面試題。包括微軟在內(nèi)的很多公司都曾采用過這道題。

  一個很基本的想法是,我們先判斷整數(shù)的最右邊一位是不是1。接著把整數(shù)右移一位,原來處于右邊第二位的數(shù)字現(xiàn)在被移到第一位了,再判斷是不是1。這樣每次移動一位,直到這個整數(shù)變成0為止,F(xiàn)在的問題變成怎樣判斷一個整數(shù)的最右邊一位是不是1了。很簡單,如果它和整數(shù)1作與運算。由于1除了最右邊一位以外,其他所有位都為0。因此如果與運算的結(jié)果為1,表示整數(shù)的最右邊一位是1,否則是0。

  得到的代碼如下:

  ///////////////////////////////////////////////////////////////////////

  // Get how many 1s in an integer's binary expression

  ///////////////////////////////////////////////////////////////////////

  int NumberOf1_Solution1(int i)

  {

  int count = 0;

  while(i)

  {

  if(i & 1)

  count ++;

  i = i >> 1;

  }

  return count;

  }

  可能有讀者會問,整數(shù)右移一位在數(shù)學上是和除以2是等價的。那可不可以把上面的代碼中的右移運算符換成除以2呢?答案是最好不要換成除法。因為除法的效率比移位運算要低的多,在實際編程中如果可以應盡可能地用移位運算符代替乘除法。

  這個思路當輸入i是正數(shù)時沒有問題,但當輸入的i是一個負數(shù)時,不但不能得到正確的1的個數(shù),還將導致死循環(huán)。以負數(shù)0x80000000為例,右移一位的時候,并不是簡單地把最高位的1移到第二位變成0x40000000,而是0xC0000000。這是因為移位前是個負數(shù),仍然要保證移位后是個負數(shù),因此移位后的最高位會設為1。如果一直做右移運算,最終這個數(shù)字就會變成0xFFFFFFFF而陷入死循環(huán)。

  為了避免死循環(huán),我們可以不右移輸入的數(shù)字i。首先i和1做與運算,判斷i的最低位是不是為1。接著把1左移一位得到2,再和i做與運算,就能判斷i的次高位是不是1……這樣反復左移,每次都能判斷i的其中一位是不是1;诖,我們得到如下代碼:

  ///////////////////////////////////////////////////////////////////////

  // Get how many 1s in an integer's binary expression

  ///////////////////////////////////////////////////////////////////////

  int NumberOf1_Solution2(int i)

  {

  int count = 0;

  unsigned int flag = 1;

  while(flag)

  {

  if(i & flag)

  count ++;

  flag = flag << 1;

  }

  return count;

  }

  另外一種思路是如果一個整數(shù)不為0,那么這個整數(shù)至少有一位是1。如果我們把這個整數(shù)減去1,那么原來處在整數(shù)最右邊的1就會變成0,原來在1后面的所有的0都會變成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。也就是說,把一個整數(shù)減去1,再和原整數(shù)做與運算,會把該整數(shù)最右邊一個1變成0。那么一個整數(shù)的二進制有多少個1,就可以進行多少次這樣的操作。

  這種思路對應的代碼如下:

  ///////////////////////////////////////////////////////////////////////

  // Get how many 1s in an integer's binary expression

  ///////////////////////////////////////////////////////////////////////

  int NumberOf1_Solution3(int i)

  {

  int count = 0;

  while (i)

  {

  ++ count;

  i = (i - 1) & i;

  }

  return count;

  }

  相關(guān)推薦:

  2015年軟考信息技術(shù)處理員考前知識點總結(jié)匯總

  2015年軟件水平考試《程序員》提高練習題匯總

  2015軟件水平考試《程序員》知識點總結(jié)匯總

文章搜索
軟件水平考試欄目導航
版權(quán)聲明:如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。
Copyright © 2004- 考試吧軟件水平考試網(wǎng) All Rights Reserved 
中國科學院研究生院權(quán)威支持(北京)
在線模擬試題
考證通關(guān)殺器
考試最新資訊
一次通關(guān)技巧