核心中的基本C庫函數 位操作

來源:互聯網
上載者:User

 

http://hi.baidu.com/yavacom/blog/item/46c8082902d2bcf7e7cd40d2.html

位操作

set_bit
在位元影像中原子地設定某一位
void set_bit (int nr, volatile void * addr)
nr為要設定的位,addr為位元影像的起始地址
這個函數是原子操作,如果不需要原子操作,則調用__set_bit函數,nr可以任意大,位元影像的大小不限於一個字。

__set_bit
在位元影像中設定某一位
void __set_bit (int nr, volatile void * addr)
nr為要設定的位,addr為位元影像的起始地址

clear_bit
在位元影像中清某一位
void clear_bit (int nr, volatile void * addr)
nr為要清的位,addr為位元影像的起始地址
該函數是原子操作,但不具有加鎖功能,如果要用於加鎖目的,應當調用smp_mb__before_clear_bit 或smp_mb__after_clear_bit函數,以確保任何改變在其他的處理器上是可見的。

__change_bit
在位元影像中改變某一位
void __change_bit (int nr, volatile void * addr)
nr為要設定的位,addr為位元影像的起始地址。
與change_bit不同,該函數是非原子操作。

change_bit
在位元影像中改變某一位
void change_bit (int nr, volatile void * addr)
nr為要設定的位,addr為位元影像的起始地址。

test_and_set_bit
設定某一位並返回該位原來的值
int test_and_set_bit (int nr, volatile void * addr)
nr為要設定的位,addr為位元影像的起始地址。
該函數是原子操作

__test_and_set_bit
設定某一位並返回該位原來的值  
int __test_and_set_bit (int nr, volatile void * addr)  
nr為要設定的位,addr為位元影像的起始地址。
該函數是非原子操作,如果這個操作的兩個執行個體發生競爭,則一個成功而另一個失敗,因此應當用一個鎖來保護對某一位的多個訪問。

test_and_clear_bit
清某一位,並返回原來的值
int test_and_clear_bit (int nr, volatile void * addr);
nr為要設定的位,addr為位元影像的起始地址。
該函數是原子操作
    
__test_and_clear_bit
清某一位,並返回原來的值
int __test_and_clear_bit (int nr, volatile void * addr);
nr為要設定的位,addr為位元影像的起始地址。
該函數為非原子操作
    

test_and_change_bit
改變某一位並返回該位的新值
int test_and_change_bit (int nr, volatile void * addr)
nr為要設定的位,addr為位元影像的起始地址。
該函數為原子操作

test_bit
確定某位是否被設定
int test_bit (int nr, const volatile void * addr)
nr為要測試的第幾位,addr為位元影像的起始地址。

find_first_zero_bit
在記憶體區中尋找第一個值為0的位
int find_first_zero_bit (void * addr, unsigned size)
addr為記憶體區的起始地址,size為要尋找的最大長度
返回第一個位為0的位號

find_next_zero_bit
在記憶體區中尋找第一個值為0的位
int find_next_zero_bit (void * addr, int size, int offset)
addr為記憶體區的起始地址,size為要尋找的最大長度,offset開始搜尋的起始位號。

ffz
在字中尋找第一個0
unsigned long ffz (unsigned long word);
word為要搜尋的字。

ffs
尋找第一個已設定的位  
int ffs (int x)
x為要搜尋的字。
這個函數的定義方式與Libc中的一樣。
    
    
hweight32
返回一個N位字的加權平衡值  
hweight32 ( x)
x為要加權的字
一個數的加權平衡是這個數所有位的總和。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.