黄色在线观看视频-黄色在线免费看-黄色在线视频免费-黄色在线视频免费看-免费啪啪网-免费啪啪网站

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

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

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

  整數的二進制表示中1的個數

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

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

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

  }

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

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

  為了避免死循環,我們可以不右移輸入的數字i。首先i和1做與運算,判斷i的最低位是不是為1。接著把1左移一位得到2,再和i做與運算,就能判斷i的次高位是不是1……這樣反復左移,每次都能判斷i的其中一位是不是1;诖耍覀兊玫饺缦麓a:

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

  // 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;

  }

  另外一種思路是如果一個整數不為0,那么這個整數至少有一位是1。如果我們把這個整數減去1,那么原來處在整數最右邊的1就會變成0,原來在1后面的所有的0都會變成1。其余的所有位將不受到影響。舉個例子:一個二進制數1100,從右邊數起的第三位是處于最右邊的一個1。減去1后,第三位變成0,它后面的兩位0變成1,而前面的1保持不變,因此得到結果是1011。

  我們發現減1的結果是把從最右邊一個1開始的所有位都取反了。這個時候如果我們再把原來的整數和減去1之后的結果做與運算,從原來整數最右邊一個1那一位開始所有位都會變成0。如1100&1011=1000。也就是說,把一個整數減去1,再和原整數做與運算,會把該整數最右邊一個1變成0。那么一個整數的二進制有多少個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;

  }

  相關推薦:

  2015年軟考信息技術處理員考前知識點總結匯總

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

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

文章責編:wangmeng  
看了本文的網友還看了
文章搜索
軟件水平考試欄目導航
版權聲明:如果軟件水平考試網所轉載內容不慎侵犯了您的權益,請與我們聯系800@exam8.com,我們將會及時處理。如轉載本軟件水平考試網內容,請注明出處。
Copyright © 2004- 考試吧軟件水平考試網 All Rights Reserved 
中國科學院研究生院權威支持(北京)
在線模擬試題
考證通關殺器
考試最新資訊
一次通關技巧
主站蜘蛛池模板: 一道本高清香蕉网 | 人成在线免费视频 | 狠狠色噜噜狠狠狠狠色综合网 | 色色免费 | 最近高清中文字幕大全1 | 999精品久久久中文字幕蜜桃 | 三级全黄裸体 | 超级碰碰永久免费视频播放 | 久久亚洲一区二区 | 一区二区三区日本 | 天天av天天翘天天综合网 | 狠狠躁日日躁人人爽 | 曰批全过程免费视频免费看 | 狂野猛交xxxx吃奶 | 国产成人咱精品视频免费网站 | 精品视频免费观看 | 天堂理论片 | 中文字幕 亚洲一区 | 国产3区 | 国产真实乱偷人视频 | 亚洲第一页综合 | 久久不卡精品 | 天天干天天操天天舔 | 国产乱码精品一区二区三区网页版 | 亚洲五月综合 | 久久人人爱 | 亚洲 欧美 日韩 综合 | 成人黄色免费 | 亚洲综合久久久久久888 | 欧美专区亚洲 | 日本免费不卡视频一区二区三区 | 欧美午夜一区二区福利视频 | 国产福利午夜波多野结衣 | 无遮羞成人的动漫在线观看 | 天堂五月天 | 国产亚洲欧美在在线人成 | 性xxxx18免费观看 | 国产清纯91天堂在线观看 | 亚洲专区第一页 | www三级免费| 日韩日批 |