posts - 2,  comments - 0,  trackbacks - 0
          http://hi.baidu.com/zengzhaonong/blog/item/7fb884509ee30c61853524c2.html

          x&(x-1)表達式的意義

          求下面函數的返回值(微軟) -- 統計1的個數
          -------------------------------------
          int func(int x)
          {
              int countx = 0;
              while(x)
              {
                  countx++;
                  x = x&(x-1);
              }
              return countx;
          }

          假定x = 9999
          10011100001111
          答案: 8

          思路: 將x轉化為2進制,看含有的1的個數。
          注: 每執行一次x = x&(x-1),會將x用二進制表示時最右邊的一個1變為0,因為x-1將會將該位(x用二進制表示時最右邊的一個1)變為0。




          判斷一個數(x)是否是2的n次方
          -------------------------------------
          #include <stdio.h>

          int func(int x)
          {
              if( (x&(x-1)) == 0 )
                  return 1;
              else
                  return 0;
          }

          int main()
          {
              int x = 8;
              printf("%d\n", func(x));
          }


          注:
          (1) 如果一個數是2的n次方,那么這個數用二進制表示時其最高位為1,其余位為0。

          (2) == 優先級高于 &
          posted on 2009-07-19 15:27 iConnect 閱讀(213) 評論(0)  編輯  收藏 所屬分類: 數學&算法&數據結構 、C/C++
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(2)

          文章分類(17)

          文章檔案(16)

          收藏夾(17)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 乌拉特后旗| 吴旗县| 虎林市| 昌黎县| 达尔| 旌德县| 西乌| 赤峰市| 翁源县| 马龙县| 库伦旗| 浦江县| 南康市| 青岛市| 浦城县| 肥东县| 吴江市| 张家港市| 镇赉县| 天全县| 济阳县| 无为县| 霸州市| 河北区| 宜宾县| 溧阳市| 叶城县| 赤壁市| 岢岚县| 黑水县| 武平县| 广河县| 颍上县| 雷山县| 乐亭县| 静安区| 郑州市| 噶尔县| 大荔县| 略阳县| 岗巴县|