程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c一些經典的操作

c一些經典的操作

編輯:關於C語言

1:求下面函數的返回值 -- 統計1的個數----x&(x-1)表達式的意義

[cpp]
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。

 


2:判斷一個數(x)是否是2的n次方

[cpp]
#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) == 優先級高於 &



摘自  SongCdut的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved